shell - 如何使用 unix 命令对 base64 和 base64URL 中的数据进行编码和解码?
问题描述
Base64 编码可以通过
$ echo Some_data_to_be_converted | base64
U29tZV9kYXRhX3RvX2JlIF9jb252ZXJ0ZWQK
Base64解码可以通过
$ echo U29tZV9kYXRhX3RvX2JlIF9jb252ZXJ0ZWQK | base64 -d
Some_data_to_be_converted
如何实现 Base64URL 编码/解码?
将“+”替换为“-”和“/”替换为“_”就足够了吗?
什么时候做填充“#”(要考虑添加/删除“#”)?
解决方案
这与@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"
推荐阅读
- paypal - PayPal Rest API - Webhooks / IPN - 是否可以接收 eBay 付款通知?
- c# - 如何设置所有者绘制控件的初始颜色
- file - 在列表框中查看 *.txt 文件
- android - 如何使内容在 webview 中滚动?
- mysql - 在 SQL 上的两列上计数不同
- amazon-ec2 - Ec2 亚马逊虚拟机
- c++ - 创建一个 C 数组包装器(更好的 std::array?)
- node.js - 使用 Node.js 将标准输出重定向到截断的文件
- java - 我的应用程序中的客户端套接字未连接到 Java 服务器
- shell - 匹配两个文件并使用 awk 根据第二个文件打印匹配的字符串