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

openssl enc -base64 -d does not decode strings after a certain length

我有一个简单的 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 个字符的字符串。知道我的脚本中可能有什么问题吗?

非常感谢!

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

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

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

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

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