PyCryptodome
跟 Day 7 實作AES加密與解密一樣要先安裝 PyCryptodome
,才能夠生成 RSA 金鑰並進行加密解密,因為上次講過如何安裝,今天就先省略安裝的說明!
以下程式碼會生成一對 RSA 公開金鑰和私密金鑰:
from Crypto.PublicKey import RSA
key = RSA.generate(2048)# 生成 2048 位的 RSA 金鑰
private_key = key.export_key()# 匯出私密金鑰
with open("private.pem", "wb") as private_file:
private_file.write(private_key)
public_key = key.publickey().export_key()# 匯出公開金鑰
with open("public.pem", "wb") as public_file:
public_file.write(public_key)
print("RSA 金鑰生成完成!")
生成完金鑰後,我們就可以使用這些金鑰進行加密和解密操作。
加密:
我們使用接收者的公開金鑰進行加密,這樣只有擁有對應私密金鑰的人才能解密。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64
with open("public.pem", "rb") as public_file:# 載入公開金鑰
public_key = RSA.import_key(public_file.read())
message = "這是一個機密訊息"
cipher = PKCS1_OAEP.new(public_key)# 使用公開金鑰進行加密
cipher_text = cipher.encrypt(message.encode())
cipher_text_base64 = base64.b64encode(cipher_text)# 將加密後的密文轉換成 base64 格式
print(f"加密後的訊息: {cipher_text_base64.decode()}")
解密:
接收者使用自己的私密金鑰來解密收到的密文。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64
with open("private.pem", "rb") as private_file:# 載入私密金鑰
private_key = RSA.import_key(private_file.read())
cipher = PKCS1_OAEP.new(private_key)# 使用私密金鑰進行解密
cipher_text = base64.b64decode(cipher_text_base64) # 將 base64 轉回原本的密文
message = cipher.decrypt(cipher_text)
print(f"解密後的訊息: {message.decode()}")