我需要将md5哈希编码为base 64.问题是如果将md5sum命令的输出提供给base64命令,则将其视为文本而不是十六进制数据。如何管理? Base64命令没有选项将其输入设置为十六进制数。
感谢您的帮助。
答案 0 :(得分:51)
使用openssl dgst -md5 -binary
代替md5sum
。如果需要,您也可以使用它进行base64编码,只使用一个程序用于所有用途。
echo -n foo | openssl dgst -md5 -binary | openssl enc -base64
(openssl md5
代替openssl dgst -md5
也可以,但我认为最好是明确的)
答案 1 :(得分:3)
您还可以使用xxd(自带vim)解码十六进制,然后再将其传递给base64:
(echo 0:; echo -n foo | md5sum) | xxd -rp -l 16 | base64
答案 2 :(得分:0)
unhex ()
{
for ((b=0; b<${#1}; b+=2))
do
printf "\\x${1:$b:2}";
done
}
md5sum2bytes ()
{
while read -r md5sum file; do
unhex $md5sum;
done
}
md5sum inputfile | md5sum2bytes | base64
答案 3 :(得分:0)
在busybox中,您可能无法使用for循环语法。 unhex()下面用while循环实现:
unhex ()
{
b=0;
while [ $b -lt ${#1} ];
do
printf "\\x${1:$b:2}";
b=$((b += 2));
done
}
md5sum2bytes ()
{
while read -r md5sum file; do
unhex $md5sum;
done
}
md5sum inputfile | md5sum2bytes | base64