node.js base64 编码字符串产生的结果略有不同(本地与 heroku)

node.js base64 编码字符串产生的结果略有不同(本地与 heroku)

我进行了一些搜索,发现问题可能出在新行字符上,该字符在本地和 Heroku 上的处理方式不同,但我不确定在哪里或如何处理它。

我有一个非常基本的应用程序,需要对字符串进行 base64 编码。

代码是非常基本的节点代码

let buff = new Buffer(cics);  
let base64data = buff.toString('base64');

以下是结果,它们类似,只是“YQ==”不同

Local
    MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFhYQ==

Heroku
    MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFh

有人知道这里可能发生什么事吗?

答案1

好吧,解码它们并看看。

$ 回显'MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFhYQ=='| base64 -d |十六进制转储-C
00000000 33 34 34 63 30 31 39 63 2d 31 66 61 30 2d 34 38 |344c019c-1fa0-48|
00000010 35 34 2d 39 61 32 33 2d 39 63 62 36 66 33 61 37 |54-9a23-9cb6f3a7|
00000020 66 33 33 64 3a 39 61 65 38 61 31 65 30 2d 38 36 |f33d:9ae8a1e0-86|
00000030 39 62 2d 34 38 36 62 2d 62 37 31 64 2d 64 64 30 |9b-486b-b71d-dd0|
00000040 63 35 34 64 37 35 61 61  61                       |c54d75aaA|
00000049
$ 回显'MzQ0YzAxOWMtMWZhMC00ODU0LTlhMjMtOWNiNmYzYTdmMzNkOjlhZThhMWUwLTg2OWItNDg2Yi1iNzFkLWRkMGM1NGQ3NWFh'| base64 -d |十六进制转储-C
00000000 33 34 34 63 30 31 39 63 2d 31 66 61 30 2d 34 38 |344c019c-1fa0-48|
00000010 35 34 2d 39 61 32 33 2d 39 63 62 36 66 33 61 37 |54-9a23-9cb6f3a7|
00000020 66 33 33 64 3a 39 61 65 38 61 31 65 30 2d 38 36 |f33d:9ae8a1e0-86|
00000030 39 62 2d 34 38 36 62 2d 62 37 31 64 2d 64 64 30 |9b-486b-b71d-dd0|
00000040 63 35 34 64 37 35 61 61 |c54d75aa|
00000048

请注意,Heroku 正在编码一个短一个字节的缓冲区(缺少最后一个字母a)–或者它的 Base64 编码器存在缺陷,会丢弃不完整的块,而不是正确使用填充。

(作为一种快捷方式,因为 Base64 输出始终由 4 个字符的块组成,所以您可以只解码YQ==本身。它确实解码为字母a。)

相关内容