Python使用RSA非对称加解密需要依赖Crypto库。不然会报No module named 'Crypto'的错误。Crypto库是一个用c++编写的密码类库。Crypto算法库在python中最初叫pycrypto,之后没有再更新过,后来有人在此基础上写了个替代库pycryptodome。这个库目前只支持python3,因此要使用Crypto(Python3.*),直接安装pip install pycryptodome。Crypto库中的功能分类如下:本文地址:http://www.04007.cn/article/1144.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/1144.html,未经许可,不得转载.
非对称密码在 Crypto.PublicKey 库下,主要有:RSA ECC DSA
哈希密码在 Crypto.Hash 库下,常用的有:MD5 SHA-1 SHA-128 SHA-256
随机数在 Crypto.Random 库下
实用小工具在 Crypto.Util 库下
数字签名在 Crypto.Signature 库下本文地址:http://www.04007.cn/article/1144.html,未经许可,不得转载.
#安装Crypto库
pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
python使用RSA实现非对称加解密程序实例如下:本文地址:http://www.04007.cn/article/1144.html,未经许可,不得转载.
import base64 from Crypto import Random from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from Crypto.PublicKey import RSA # 伪随机数,创建rsa算法实例 random_generator = Random.new().read rsa = RSA.generate(1024, random_generator) # 生成秘钥对的 private_pem = rsa.exportKey() print("private_key:", private_pem) public_pem = rsa.publickey().exportKey() print("public_key:", public_pem) # 用公钥加密,被加密的数据后面.encode("utf8")不能省略 msg = 'test' message = msg.encode("utf8") # 导入公钥加密并对数据加密(后使用) rsakey = RSA.importKey(public_pem) cipher = Cipher_pkcs1_v1_5.new(rsakey) cipher_text = base64.b64encode(cipher.encrypt(message)) # 可以不使用base64编码 #cipher_text = cipher.encrypt(message) print("加密后:", cipher_text) # 用私钥解密 rsakey = RSA.importKey(private_pem) cipher = Cipher_pkcs1_v1_5.new(rsakey) # 使用base64解密,(在前端js加密时自动是base64加密) text = cipher.decrypt(base64.b64decode(cipher_text), random_generator) # text = cipher.decrypt(cipher_text, random_generator) print("加密前:", text)最终输出结果示例:
private_key: b'-----BEGIN RSA PRIVATE KEY-----\nMIICXAIB..
public_key: b'-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSI
加密后: b'CpXsS9Veqs+Kk+4PaXTaYbizUAlJer
加密前: b'test'本文地址:http://www.04007.cn/article/1144.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/1144.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/1144.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |