Python:RSA 公開鍵/秘密鍵で文字列を暗号化/復号化する

ライブラリに pycryptodome を使用するので、予めインストールしておきます。

pip install pycryptodome

暗号化と復号化は別のマシンで実行されるものですが、例ということで。

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# 暗号化する文字列
message = "kuma"

# 公開鍵/秘密鍵を生成する
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
print(f"公開鍵: {public_key.decode('utf-8')}")

# 公開鍵で文字列を暗号化する
public_key_obj = RSA.import_key(public_key)
cipher = PKCS1_OAEP.new(public_key_obj)
encrypted_message = cipher.encrypt(message.encode("utf-8"))

# 暗号化した結果を秘密鍵で復号化する
private_key_obj = RSA.import_key(private_key)
decipher = PKCS1_OAEP.new(private_key_obj)
decrypted_message = decipher.decrypt(encrypted_message)

print(f"元の文字列: {message}")
print(f"暗号化後: {encrypted_message.hex()}")
print(f"復号化後: {decrypted_message.decode('utf-8')}")
公開鍵: -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvYcDGJ3IDGQBDAxtyrto
NG50KZex+NVyFHf9qOt/FKT6HYyMwB3XrdTQiyw6TZE9IlfKsnzQeNDuNUr9d9kE
JVR1CpeOtDGu+Yi/7Fzz1jm5/Oy4FgsESv4J0ENB5ICcMTtagy8E8hUrAXzkAOZ0
PPwIQ+c4QGb4Exg7to7AD024+VVsjiW2obAXRechzGbE38uNFLSMI4pqBVlKfh/0
WMSk6pQj13CsTwk5NSUm+i9D4/LYGU2n6jQBebTe/aITlHSYQX/BanZbmEGcGmv9
s6b0mfzV+Wp4YBmUIoAVBfb1gTjLVbTEA8ieE20p48N6wAGxCmoTkByoqLgwkBEv
jQIDAQAB
-----END PUBLIC KEY-----
元の文字列: kuma
暗号化後: 84452db925a820614abb1b21b5716cc7cb14a7163b37aa3c4533683b282dcad9f65a052bbfcc8281beddea9ef08e02027a9afcd391f2b238eb10f42d0b279338487837de02c02cc92281b7f7ac0750ebad69ac365e04300730a65ffd09e76bddf535bd58051a4b2a8db08dcdbf02a9d0ce0b9bcd1385e4274f18d84df47277520039665a4420a4a5467836289e7f9c10a00eb3a70484c97d1f7185c716fd9c07da601666937e70698005ab8ef2a68b92001aa8eb4a330516a57eefd044e177ccd4163fd425218c6eda94b73d405b2211cc5157815375150a6973ac666e32f053b687e9c99c408f599e81a3ffc5e4f77de45bc6dae36ec9faa60332909d541c4c
復号化後: kuma

コメント