如何在BASH中将md5 sum编码为base64

时间:2011-01-03 11:15:09

标签: bash md5 base64

我需要将md5哈希编码为base 64.问题是如果将md5sum命令的输出提供给base64命令,则将其视为文本而不是十六进制数据。如何管理? Base64命令没有选项将其输入设置为十六进制数。

感谢您的帮助。

4 个答案:

答案 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