opensslとpycryptoで3DES
pythonとopensslで3DES暗号化処理のメモ
opensslでコマンドラインから処理
#3DESで暗号化 # plain.txtファイルの内容を3DESのCBCモードで暗号化し、出力した暗号文をcipher.binに格納する openssl enc -des3 -e -salt -in plain.txt -out cipher.bin -pass pass:hogehogehogehoge #3DESで復号 cipher.binの内容を3DESのCBCモードで復号し、出力した平文をplain_decoded.txtに格納する openssl enc -des3 -d -in cipher.bin -out plain_decoded.txt -pass pass:hogehogehogehoge
# coding=utf-8 from Crypto.Cipher import DES3 from Crypto import Random def encrypt_file(in_filename, out_filename, chunk_size, key, iv): des3 = DES3.new(key, DES3.MODE_CBC, iv) with open(in_filename, 'r') as in_file: with open(out_filename, 'w') as out_file: while True: chunk = in_file.read(chunk_size) if len(chunk) == 0: break elif len(chunk) % 16 != 0: chunk += ' ' * (16 - len(chunk) % 16) out_file.write(des3.encrypt(chunk)) def decrypt_file(in_filename, out_filename, chunk_size, key, iv): des3 = DES3.new(key, DES3.MODE_CBC, iv) with open(in_filename, 'r') as in_file: with open(out_filename, 'w') as out_file: while True: chunk = in_file.read(chunk_size) if len(chunk) == 0: break out_file.write(des3.decrypt(chunk)) key = 'hogehogehogehoge' iv = Random.get_random_bytes(8) #3DESで暗号化 encrypt_file('plain.txt', 'cipher.bin', 8192, key, iv) #3DESで復号 decrypt_file('cipher.bin', 'plain_decoded.txt', 8192, key, iv)
メモ
opensslのコマンドではモードは特に指定していないがdes3はデフォルトでCBCらしい。
pythonのコードは参考リンクのものとほぼ同じだがモードをopensslに合わせてCBCにしてある。
pythonのコードにある「iv」は初期化ベクトル (initialization vector)の略。
モードについては新版暗号技術入門 秘密の国のアリスがとてもわかりやすい。古い版しかもってないけど。
OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―
- 作者: John Viega,Matt Messier,Pravir Chandra,齋藤孝道
- 出版社/メーカー: オーム社
- 発売日: 2004/08
- メディア: 単行本
- 購入: 4人 クリック: 89回
- この商品を含むブログ (25件) を見る
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/11/22
- メディア: 単行本
- 購入: 46人 クリック: 720回
- この商品を含むブログ (82件) を見る
参考 : Python and cryptography with pycrypto | Laurent Luce's Blog