首页 > 解决方案 > 如何使用 unix 命令对 base64 和 base64URL 中的数据进行编码和解码?

问题描述

Base64 编码可以通过

$ echo Some_data_to_be_converted | base64

U29tZV9kYXRhX3RvX2JlIF9jb252ZXJ0ZWQK

Base64解码可以通过

$ echo U29tZV9kYXRhX3RvX2JlIF9jb252ZXJ0ZWQK | base64 -d

Some_data_to_be_converted
  1. 如何实现 Base64URL 编码/解码?

  2. 将“+”替换为“-”和“/”替换为“_”就足够了吗?

  3. 什么时候做填充“#”(要考虑添加/删除“#”)?

标签: shellencodingbase64decodingbase64url

解决方案


这与@jps 的建议相同,但更短。还要记住,echo默认情况下总是在末尾添加换行符,所以当你想对其进行编码时,你必须添加-n.

echo -n "Some_data_to_be_converted" | base64 | tr '/+' '_-' | tr -d '='

使用内置 bash 工具将其解码更复杂,因为我没有找到一种简单的方法来用 '=' 填充字符串,以便长度可以被 4 整除。可能可以完成,awk但我没有挖掘够深。如果你有本地红宝石,它变得微不足道:

2.6.2 > require 'base64'
2.6.2 > Base64.urlsafe_encode64('test', padding: false)
 => "dGVzdA"
2.6.2 > Base64.urlsafe_decode64('dGVzdA')
 => "test"

推荐阅读