给定相同的输入字符串,为什么这些 base64 编码输出不同?

Why do these base64 encoding outputs differ, given the same input string?

从相同的输入字符串中获取 bas64 编码字符串时,我发现 JavaScript、Groovy 和 Go 具有相同的结果,但 GNU base64 略有不同。这是为什么?

Java脚本(nodejs v0.10.33):

new Buffer('Laurence Tureaud is Mr. T').toString('base64');
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==

Groovy(Java 8 上的 2.3.7):

'Laurence Tureaud is Mr. T'.bytes.encodeBase64().toString()
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==

开始 (1.4):

b64.StdEncoding.EncodeToString([]byte("Laurence Tureaud is Mr. T"))
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==

GNU base64(GNU coreutils 8.12.197-032bb with UTF-8 术语字符集):

echo 'Laurence Tureaud is Mr. T' | base64
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVAo=

echo 'Laurence Tureaud is Mr. T'

Echo 在字符串后添加一个换行符。

尝试以下方法删除换行符:

echo -n 'Laurence Tureaud is Mr. T' | base64

你得到 TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==

所有输出都是一样的。

唯一的区别是 bash 在使用 echo 时在末尾附加了一个换行符 (\n)。因此 是附加到输出的附加字符(字符 = 只是 base64 中的填充)。