openssl enc -base64 -d在一定长度后不解码字符串

时间:2016-02-09 10:43:12

标签: bash encoding openssl

我有一个简单的bash脚本,它使用base64对字符串进行编码/解码。脚本是:

#!/bin/bash
echo "encode or decode ?"
read input

if [ "$input" == "encode" ]
then

echo Please, enter your secret message 
read message
echo "The cipher representing your message is"
echo -n $message | openssl enc -base64


else

echo "Please enter your cipher"
read cipher
echo "Your secret message is"
echo  $cipher | openssl enc -base64 -d
echo ""


fi

只要被编码的字符串的长度最多为49个字符,脚本就可以正常工作。超过49个字符的字符串无法正确解码。知道我的脚本可能有什么问题吗?

非常感谢!

1 个答案:

答案 0 :(得分:4)

openssl enc -base64在64个字符的编码字符串后插入一个回车符。这实际上发生在要编码的字符串的第49个字符上。

要避免编码字符串中的此换行符,请在-A命令中使用选项openssl一次编码或解码整个字符串:

echo -n $message | openssl enc -base64 -A

echo  $cipher | openssl enc -base64 -d -A 

这看起来特定于openssl。如果您使用coreutils包中的base64可执行文件,这也可以。