Md5ハッシュをbase64にエンコードする必要があります。問題は、md5sumコマンドの出力をbase64コマンドに与えると、16進データではなくテキストと見なされることです。それを管理する方法は? Base64コマンドには、入力を16進数として設定するオプションがありません。
助けてくれてありがとう。
使用する openssl dgst -md5 -binary
の代わりに md5sum
。必要に応じて、base64エンコードにも使用でき、すべての用途で1つのプログラムのみを使用できます。
echo -n foo | openssl dgst -md5 -binary | openssl enc -base64
(openssl md5
の代わりに openssl dgst -md5
も機能しますが、明示する方が良いと思います)
Base64に渡す前に、xxd(vimに付属)を使用して16進数をデコードすることもできます。
(echo 0:; echo -n foo | md5sum) | xxd -rp -l 16 | base64
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
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