在这个base 64编码中哪个字符串正确?

时间:2012-03-11 17:18:22

标签: base64

我是base64的新手。我做了一些测试。我看到了一些奇怪的事情

当我通过终端编码“Nguyen Tran Viet A”时,它产生:

vietiPhone:~ vietnt$ echo "Nguyen Tran Viet A" | openssl enc -base64
Tmd1eWVuIFRyYW4gVmlldCBBCg==

但后来我运行了一些libs(在Objective-C中),它产生了:

Tmd1eWVuIFRyYW4gVmlldCBB

哪个是对的?

谢谢!

3 个答案:

答案 0 :(得分:3)

echo在输出结束时产生EOL,因此它使用OpenSSL进行编码。试试-n选项:

$ echo -n "Nguyen Tran Viet A" | openssl enc -base64
Tmd1eWVuIFRyYW4gVmlldCBB

答案 1 :(得分:2)

这是因为 echo命令会在 STDOUT 中的字符串后附加\n 。为了防止它。使用以下语法

echo -n "Nguyen Tran Viet A" | openssl enc -base64

答案 2 :(得分:2)

区别在于行尾字符。当您使用“echo”时,它会输出换行符:

base64 -D | od -c
Tmd1eWVuIFRyYW4gVmlldCBBCg==

0000000    N   g   u   y   e   n       T   r   a   n       V   i   e   t
0000020        A  \n                                                    
0000023

ObjC示例没有换行符。你可能做过像

这样的事情
[@"Nguyen Tran Viet A" base64Encode]

产生:

base64 -D | od -c
Tmd1eWVuIFRyYW4gVmlldCBB

0000000    N   g   u   y   e   n       T   r   a   n       V   i   e   t
0000020        A                                                        
0000022

没有结尾换行符。所以他们都是正确的 - 你只是编码稍微不同的东西。