web-dev-qa-db-ja.com

md5の合計をBASHでbase64にエンコードする方法

Md5ハッシュをbase64にエンコードする必要があります。問題は、md5sumコマンドの出力をbase64コマンドに与えると、16進データではなくテキストと見なされることです。それを管理する方法は? Base64コマンドには、入力を16進数として設定するオプションがありません。

助けてくれてありがとう。

24
Rusty Horse

使用する openssl dgst -md5 -binary の代わりに md5sum。必要に応じて、base64エンコードにも使用でき、すべての用途で1つのプログラムのみを使用できます。

echo -n foo | openssl dgst -md5 -binary | openssl enc -base64

openssl md5 の代わりに openssl dgst -md5も機能しますが、明示する方が良いと思います)

53
plundra

Base64に渡す前に、xxd(vimに付属)を使用して16進数をデコードすることもできます。

(echo 0:; echo -n foo | md5sum) | xxd -rp -l 16 | base64 
4
BeniBela

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
0
mikentalk
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