【python】pycryptodome

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()

なるほど、深いな…