非對稱加密 RSA 擁有兩個密鑰, 分別為 公鑰 和 私鑰,?? 服務器端擁有公鑰和私鑰, 二客戶端,只有公鑰, 這個公鑰可以隨便傳,即使被截獲也沒有關系, 加密使用公鑰, 而解密, 只能用私鑰
生成公鑰和私鑰:
生成的公鑰和私鑰, 需要保存到一個文件之中
from Crypto.PublicKey import RSA # 用來管理密鑰rsa_key = RSA.generate(2048) # 生成公鑰和私鑰# 獲取私鑰
private_key = rsa_key.export_key()# 獲取公鑰
public_key = rsa_key.public_key().export_key()with open("rsa_public_pem.txt", "wb") as f:f.write(public_key)with open("rsa_private_key_pem.txt", "wb") as f:f.write(private_key)
加密:
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
import base64message = "我愛python編程, 勵志成為一名偉大的爬蟲大佬!"f = open("rsa_public_pem.txt", "r", encoding="utf-8")# 使用公鑰創建一個 密鑰
rsa_key = RSA.import_key(f.read())# 使用創建的密鑰來創建一個rsa 加密對象
rsa = PKCS1_v1_5.new(rsa_key)# 加密數據
miwen = rsa.encrypt(message.encode("utf-8"))# 使用b64 編碼
result = base64.b64encode(miwen).decode("utf-8")
print(result)
解密:
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
import base64# 準備密文
miwen = "ToumbsMmQphEDsgdW5AKaHgpEY1tU93MDL9t9zrjn/xsohIoi2fVfwcsqcyv28JJvJLEeZJ7EAV18rGNP6p+k1WkQHMERIez/NRjNvBWIuoZdb+HGqWQQB5yiOS9nFo6DY1muYrYBPJpUJ0+eXfH8N8+07hGLvJlpYtM4OqfMVC45+dYx9FBWNwHsRG8V0kHPDPCzMN06oFqIXjHulFFFvJ/GkEqaLENCmI713Jy5L7jQh0ff2u0YSIHujTYMvhzgEKt4ZoMr0yH4WcRpdYCLjnlhIW/GpV1gy8dXNQ7n80z/JJtsmuQ4VcquGx4LkEVnIhB62lMuUaVn1NliEBPdg=="# 讀取私鑰
f = open("rsa_private_key_pem.txt", "r", encoding="utf-8")# 導入私鑰
rsa_key = RSA.import_key(f.read())# 使用私鑰創建rsa對象
rsa = PKCS1_v1_5.new(rsa_key)# 解密
mingwen = rsa.decrypt(base64.b64decode(miwen), None)print(mingwen.decode())