套餐

套餐

有没有一个工具可以在 bash 中执行此操作?

答案1

套餐

是的,有几个。套餐coreutils(debian 中默认安装)两者都包含32进制64位基数。他们可以编码或解码:

$ printf '%s' "abc" | base64
YWJj

$ printf '%s' "abc" | base64 | base64 -d
abc

了解使用 echo 可能会添加一个尾随新行,这将更改生成的 Base64 编码字符串:

$ echo "abc" | base64
YWJjCg==

还有其他软件包在 packagesbasez和中也有类似的工具openssl。后者通常也是默认安装的,而前者则不是。

$ printf '%s' "abc" | openssl base64
YWJj

编码

源字符串以任何语言环境(代码页)进行编码与 base64 编码无关。 Base64 程序对字节进行编码,而不是字符。

$ printf '%s' "éäìǫ" | base64 | base64 -d
éäìǫ

在任何系统上都可以完全相同地工作。好吧,在任何理智的系统中,echo "éäìǫ"也会éäìǫ在命令行上打印。

当然,如果源字符串在一个系统中编码,然后在具有不同语言环境的系统中解码,那么您很可能会得到一个莫吉巴克细绳。那不是base64要解决的问题,而是通过改变字符串的编码来解决的问题。可能与iconv

$ echo -n "Москва" | base64            # in a utf8 locale
0JzQvtGB0LrQstCw

但是,在使用 iso889-5 的西里尔语语言环境中(可能是 ru_RU.ISO-8859-5,还有其他使用西里尔语的语言):

$ echo "0JzQvtGB0LrQstCw" | base64 -d
ааОбаКаВаА

$ echo "0JzQvtGB0LrQstCw" | base64 -d | iconv -f utf8 -t iso8859-5
Москва

相关内容