openssl で DES 64 ビットを使用して暗号化する

openssl で DES 64 ビットを使用して暗号化する

私がやろうとしているのは、非常に単純なこと、つまり 64 ビットのパスワードと 64 ビットのプレーンテキスト (どちらも 16 進数) を使用して、それを単純な古い DES で暗号化することです。

私のスクリプトは次のようになります:

plaintext=`echo -n "$2" | sed 's/\(..\)/\\\x\1/g'`
key=$1
printf "$plaintext" | openssl enc -nosalt -e -des -nopad -K "$key" -iv "0000000000000000" | od --format=x1 --width=32 --address-radix=n | sed 's/ //g'

実行すると次の結果が得られます。

./des_enc 5B5A57676A56676E 675A69675E5A6B5A
b617e2c84a4fba2149dd7132433031392257b99d9284b1031c351c15825aca52

問題は、openssl から返されるデータが多すぎることです。64 ビットのデータのみが返されることを期待していましたが、実際には 512 ビットが返されました。DES の 64 ビット バージョンを明示的に要求する方法がわかりません。そもそも可能ですか?

注: 上記で使用した値は、「H. Katzan、The Standard Data Encryption Algorithm、pp75-94、Petrocelli Books Inc.、New York、1977」からの引用です。

Key:        5B5A57676A56676E
Plaintext:  675A69675E5A6B5A
Ciphertext: 974AFFBF86022D1F

答え1

プレーンテキストも 16 進数で提供されます。暗号化する前に、これをバイナリに戻す必要があります。

関連情報