pycryptodomeとは?
L pycryptodomeはデータの暗号化・復号化を可能にするpythonライブラリ
L pycryptoの方が知名度があるが後継のようなもの
$ pip install pycryptodome
pycryptodomeは次の三つの処理がある
– 秘密鍵・公開鍵の作成
– 公開鍵を使ったデータの復号化
– 秘密鍵を使ったデータの復号化
from Crypto.PublicKey import RSA key = RSA.generate(2048) private_key = key.export_key() file_out = open("private.pem", "wb") file_out.write(private_key) file_out.close() public_key = key.publickey().export_key() file_out = open("public.pem", "wb") file_out.write(public_key) file_out.close()
公開鍵を使ったデータの暗号化
from Crypto.PublicKey import RSA from Crypto.Random import get_random_bytes from Crypto.Cipher import AES, PKCS1_OAEP data = "日本語で書かれた秘密のメッセージ".encode("utf-8") file_out = open("encrypted_data.txt", "wb") recipient_key = RSA.import_key(open("public.pem").read()) session_key = get_random_bytes(16) # セッションキーをRSA公開鍵で暗号化 cipher_rsa = PKCS1_OAEP.new(recipient_key) enc_session_key = cipher_rsa.encrypt(session_key) # データをAESセッションキーで暗号化 cipher_aes = AES.new(session_key, AES.MODE_EAX) ciphertext, tag = cipher_aes.encrypt_and_digest(data) [file_out.write(x) for x in (enc_session_key, cipher_aes.nonce, tag, ciphertext)] file_out.close()
なるほど、深いな…