Base64编码可以通过
$ echo Some_data_to_be_converted | base64
U29tZV9kYXRhX3RvX2JlIF9jb252ZXJ0ZWQK
Base64解码可以通过
$ echo U29tZV9kYXRhX3RvX2JlIF9jb252ZXJ0ZWQK | base64 -d
Some_data_to_be_converted
如何实现Base64URL编码/解码?
是否足以将“ +”替换为“-”,将“ /”替换为“ _”?
何时执行填充“#”(添加/删除要考虑的“#”)?
答案 0 :(得分:2)
这与@jps相同,但简短。还请记住,默认情况下,echo
总是在末尾添加换行符,因此,要对其进行编码,必须添加-n
。
echo -n "Some_data_to_be_converted" | base64 | tr '/+' '_-' | tr -d '='
使用bulit-in bash工具将其解码回更为复杂,因为我没有找到一种简单的方法来用'='填充字符串,以便将长度除以4。可能可以使用{{1 }},但我没有深入研究。如果您有当地的红宝石,它将变得微不足道:
awk
答案 1 :(得分:1)
如果您已经有 base64编码字符串,则只需将“ +”替换为“-”,将“ /”替换为“ _”,以获得 base64url编码串。 为此,可以使用以下命令:
echo Some_data_to_be_converted | base64 | sed 's/+/-/g; s/\//_/g';
(您可以尝试Execute Bash Shell Online)
Base64编码将输入字节(8位)映射为6位表示形式。 4个base64字符可以编码4 * 6 = 24位,等于3个字节。每当输入中的字节数不能除以3时,根据标准就需要填充。
填充字符为=
由于=
字符用于URL中的键值对,因此,如果要在URL中使用编码值,则不能直接将其用于填充。您可以只忽略填充,因为大多数实现仍将起作用,并且只需忽略最后2或4个未使用的位即可。或者,如果接收方确实需要填充,则必须用URL安全表示形式=
替换%3d
。