Python——Crypto库实现公钥加密私钥解密
生活随笔
收集整理的這篇文章主要介紹了
Python——Crypto库实现公钥加密私钥解密
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- RSA介紹
- openssl生成公鑰和私鑰
- python實現生成公私鑰
- PKCS1_v1_5包
- 數據加密以及解密
- 導入相關包
- 數據加密
- 數據解密
- 效果展示
Crypto 模塊提供了加密功能,包含對 OpenSSL 的哈希、HMAC、加密、解密、簽名、以及驗證功能的一整套封裝。
本文主要是Crypto RSA算法加密。
RSA介紹
RSA算法是一種非對稱加密算法,即由一個私鑰和一個公鑰構成的密鑰對,通過私鑰簽名,公鑰驗簽,或者通過公鑰加密,私鑰解密。其中,公鑰可以公開,私鑰必須保密。
例:當小明給小紅發送信息時,可以用小明自己的私鑰簽名,小紅用小明的公鑰驗簽,也可以用小紅的公鑰加密,小紅用她自己的私鑰解密,這就是非對稱加密。相比對稱加密,非對稱加密只需要每個人各自持有自己的私鑰,同時公開自己的公鑰。
openssl生成公鑰和私鑰
使用openssl生成公鑰和私鑰:
首先,在命令行執行以下命令以生成一個RSA密鑰對:
openssl genrsa -aes256 -out rsa-key.pem 2048根據提示輸入密碼,這個密碼是用來加密RSA密鑰的,加密方式指定為AES256,生成的RSA的密鑰長度是2048位。執行成功后,我們獲得了加密的rsa-key.pem文件。
第二步,通過上面的rsa-key.pem加密文件,我們可以導出原始的私鑰,命令如下:
openssl rsa -in rsa-key.pem -outform PEM -out rsa-prv.pem輸入第一步的密碼,我們就可以獲得加密后的私鑰。
類似的,我們用下面的命令導出原始的公鑰:
openssl rsa -in rsa-key.pem -outform PEM -pubout -out rsa-pub.pempython實現生成公私鑰
首先,需要安裝Crypto庫:
python3 -m pip install pycryptodome from Crypto import Random from Crypto.PublicKey import RSA# 獲取一個偽隨機數生成器 random_generator = Random.new().read # 獲取一個rsa算法對應的密鑰對生成器實例 rsa = RSA.generate(1024, random_generator)# 生成私鑰并保存 private_pem = rsa.exportKey() with open('rsa.key', 'wb') as f:f.write(private_pem)# 生成公鑰并保存 public_pem = rsa.publickey().exportKey() with open('rsa.pub', 'wb') as f:f.write(public_pem)PKCS1_v1_5包
RSA PKCS#1 v1.5加密標準主要描述了如何使用RSA公鑰密碼體系加密、解密數據,以及數字簽名的算法
數據加密以及解密
導入相關包
from Crypto import Random from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64數據加密
message = "This is a plain text." with open('rsa.pub', 'r') as f:public_key = f.read()rsa_key_obj = RSA.importKey(public_key)cipher_obj = PKCS1_v1_5.new(rsa_key_obj)cipher_text = base64.b64encode(cipher_obj.encrypt(message.encode()))print('cipher text: ', cipher_text)數據解密
with open('rsa.key', 'r') as f:private_key = f.read()rsa_key_obj = RSA.importKey(private_key)cipher_obj = PKCS1_v1_5.new(rsa_key_obj)random_generator = Random.new().readplain_text = cipher_obj.decrypt(base64.b64decode(cipher_text), random_generator)print('plain text: ', plain_text.decode())效果展示
總結
以上是生活随笔為你收集整理的Python——Crypto库实现公钥加密私钥解密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zb如何导出自己画的_ZBrush中如何
- 下一篇: excel服务器虚拟机,开源 excel