我是base64的新手。我做了一些测试。我看到了一些奇怪的事情
当我通过终端编码“Nguyen Tran Viet A”时,它产生:
vietiPhone:~ vietnt$ echo "Nguyen Tran Viet A" | openssl enc -base64
Tmd1eWVuIFRyYW4gVmlldCBBCg==
但后来我运行了一些libs(在Objective-C中),它产生了:
Tmd1eWVuIFRyYW4gVmlldCBB
哪个是对的?
谢谢!
答案 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
没有结尾换行符。所以他们都是正确的 - 你只是编码稍微不同的东西。