openssl enc -e aes-256-cbc -base64 -iv iv値 -k 暗号鍵 ファイル -in 暗号化前ファイル名 -out 暗号化後ファイル名 -md sha256
上記コマンドと同等のpythonコードを書きたいです
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding from cryptography.hazmat.backends import default_backend from base64 import b64encode def test_enc(): # IVとキーを16進数からバイトに変換 iv = bytes.fromhex(iv値) key = hashlib.sha256(bytes.fromhex(キー)) # ファイルを読み込む with open('before_encrypt.csv', 'rb') as f: data = f.read() # パディング処理 padder = padding.PKCS7(128).padder() padder_data = padder.update(data) + padder.finalize() cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) encryptor = cipher.encryptor() # データを暗号化 encrypted_data = encryptor.update(padder_data) + encryptor.finalize() # 暗号化されたデータをBase64エンコードしてファイルに書き込む with open('encrypted.csv', 'wb') as f: f.write(b64encode(encrypted_data))
ライブラリ変えたパターン
from Crypto.Cipher import AES from base64 import b64encode import hashlib def test_enc(): # IVとキーをバイトに変換 iv = bytes.fromhex(iv値) key = hashlib.sha256(キー.encode()).digest() # ファイルの読み込み with open('before_encrypt.csv', 'rb') as f: data = f.read() # パディング処理 padder = padding.PKCS7(128).padder() padder_data = padder.update(data) + padder.finalize() cipher = AES.new(key, AES.MODE_CBC, iv) # データを暗号化 encrypted_data = cipher.encrypt(padder_data) # 暗号化されたデータをBase64エンコードしてファイルに書き込む with open('encrypted.csv', 'wb') as f: f.write(b64encode(encrypted_data))
このようなコードを書いているのですが、暗号化後のファイルの中身がopensslコマンドを実行する場合と全く異なるものになります。
例えばaaaaaaaaaとだけ書いた適当なファイルを暗号化してみた結果
openssl暗号化→U2FsdGVkX19p4HtziF4MIqmV58VE9860Tc1oyQ2x+oI=
コードによる暗号化→OgSvtBFb7lqtEJYWzcpUJA==
のようになります
-kオプションと-md sha256によるキーの変換が再現できていないように思われるのですが、なにかお気づきの方がいれば教えていただきたいです。
