2011-01-03 19 views
22

ベース64にmd5ハッシュをエンコードする必要があります。md5sumコマンドの出力をbase64コマンドに与えると、それはテキストとして扱われ、16進データではありません。それを管理する方法は? Base64コマンドには、入力を16進数として設定するオプションはありません。BASHでmd5 sumをbase64にエンコードする方法

ありがとうございました。

答えて

42

md5sumの代わりにopenssl dgst -md5 -binaryを使用してください。必要に応じて、base64エンコードにも使用でき、すべての用途に1つのプログラムしか使用できません。 busyboxので

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

openssl md5代わりのopenssl dgst -md5があまりにも動作しますが、私はそれが明示的である方が良いと思う)

+0

感謝をずっと。それはうまく動作します。 –

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 
0

あなたは、ループ構文のために使用することはできない場合があります。 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 
3

あなたはまた、BASE64に渡す前に、進をデコードする(VIMが付属しています)XXDを使用することができます。

(echo 0:; echo -n foo | md5sum) | xxd -rp -l 16 | base64 
関連する問題