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
可执行文件,这也可以。
我有一个简单的 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
可执行文件,这也可以。