2017-07-21 6 views
0

CFBモードで3つのキーとトリプルDESアルゴリズムで初期化ベクトル(iv)を使用してプレーンテキストを暗号化しようとしています。 pycryptoを使ったPythonでの私の実装は以下の通りです。CFBモードでトリプルDESで暗号化するときにopensslコマンドとpycryptoの出力が異なる

import base64 
from Crypto.Cipher import DES3 

key1 = b'key1____' 
key2 = b'key2____' 
key3 = b'key3____' 
key = key1 + key2 + key3 
initialization_vector = b'init____' 

des3 = DES3.new(key, mode=DES3.MODE_CFB, IV=initialization_vector) 
plain_text = "this is plain text." 
encrpted = des3.encrypt(plain_text) 
b64 = base64.b64encode(encrpted) 

print('key = {}'.format(key.hex())) 
print('iv = {}'.format(initialization_vector.hex())) 
print('encrypted = {}'.format(b64.decode())) 

このプログラムの出力:

key = 6b6579315f5f5f5f6b6579325f5f5f5f6b6579335f5f5f5f 
iv = 696e69745f5f5f5f 
encrypted = TGlbmL795TWPX0h39F19N6WZ6Q== 

クロスチェック結果に、私は、Pythonとopensslコマンドからの1つがこの出力を比較しました。しかし、opensslは異なる結果を出力します。

$ echo -n "this is plain text." | openssl des-ede3-cfb -K 6b6579315f5f5f5f6b6579325f5f5f5f6b6579335f5f5f5f -iv 696e69745f5f5f5f -base64 
TEkV+qFiNHi+C8cxpG2qyzGw9A== 

アルゴリズムとモードが同じでも出力が変化するのはなぜですか?どんな助けでも大歓迎です。

答えて

3

私は自分でこの問題を解決しました。違いは、CFBのデフォルトセグメントサイズでした。 pycryptoのデフォルトは8ビットですが、opensslのデフォルトは64ビットです。私は次のようにopensslコマンドでセグメントサイズを指定して同じ結果を得ました。

~$ echo -n "this is plain text." | openssl des-ede3-cfb8 -K 6b6579315f5f5f5f6b6579325f5f5f5f6b6579335f5f5f5f -iv 696e69745f5f5f5f -base64 
TGlbmL795TWPX0h39F19N6WZ6Q== 
関連する問題