每日一模块-Crypto模块RSA非对称加密
pycrypto模块支持的加密方式
-
对称加密方式:
AES
DES
ARC4 -
散列值计算:
MD5
SHA
HMAC -
公钥加密和签名:
RSA
DSA
RSA加密算法是一种非对称加密算法
安装
1 pip3 install pycryptodome
2 快速方式:pip3 install -i https://pypi.douban.com/simple pycryptodome
3 PyCrypto 已死,请替换为 PyCryptodome4 如有异常,尝试
5 需要在python目录里面把Python36\Lib\site-packages下的crypto文件改名,没错,就是直接改成Crypto。结果就能用了...
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
pip install pycrypto
如果导入错误则参考:
ImportError: No module named Crypto.Cipher
# -*- coding: utf-8 -*- from pprint import pprint from Crypto import Random from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 # rsa算法生成实例 def get_key(): rsa = RSA.generate(1024, Random.new().read) # master的秘钥对的生成 private_pem = rsa.exportKey() public_pem = rsa.publickey().exportKey() return { "public_key": public_pem.decode(), "private_key": private_pem.decode() } # 生成的公钥私钥对 private_key = """-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDfEQ82qUrto7h4BL3TsA/DFXSdM44cbeY4kPccD7gLGhaZRClz YKIh5zYdfjBGF+0HXfMa1u9b7GNs2AjVIsx8Kx0QLnMfmtkmGWGhOXz/9IDLKJOx 0weKv61gysKItgzVKn2mbLool4R/PQBc3AjDyHw+io1KpVz+3kRTaGs1fQIDAQAB AoGAWB4kFWLA/6k6OOcemd4mC9mQ7HyuOdrMJDJX+5TWDkSrArajbTmSMrRkczgj F71h3BQn8cVQXs695ARfUNrjTbi2Y0LjN7ScK7ExzTLdoMEFw5JsHggJZ0zBQY6w mwOdGfqzA6tZPXgkn+jqEha+CD6GrwnTM1oDGJC/aKG2OmECQQDkO9IhUhFc/PSU 0zvGE6AOcqk5wlOuvMg+oAFHJHJZ9XW7+X/Nx0ZoVDFq/cZQj+46t+fiwUwhdW7l IfCvNGKFAkEA+jRQmWGKrbf1ns4S0SezJvysd5O6otRGJXr+Ex2uDhc39ZTeUsyg kjrLhp8STLMOmql+8g5fghct17EuCX1EmQJBAJz9BNnEkIrst/OSpH/nyeWGOx6u q077LaXd+2MLD9kO/O/Se3V5B9YFa4STkJCjoBMloswXd51gIGpdgSeSmd0CQQCL PrwwcGmWfo+ynqs4PajlpK9zKQMwhYS4bTejedwZOXDKOtx0Ji+i0hfcxwCPMQOK rZPZsIgUxUOdC508aLvZAkBDkHxunCzDm0w4DdTUN7S9YSpVvQEjK/xUQiWaKV12 8QgskhU2DNdYK2NxifnWrKtx3uQmqMxX5aLuJZ4493yr -----END RSA PRIVATE KEY-----""" public_key = """-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfEQ82qUrto7h4BL3TsA/DFXSd M44cbeY4kPccD7gLGhaZRClzYKIh5zYdfjBGF+0HXfMa1u9b7GNs2AjVIsx8Kx0Q LnMfmtkmGWGhOXz/9IDLKJOx0weKv61gysKItgzVKn2mbLool4R/PQBc3AjDyHw+ io1KpVz+3kRTaGs1fQIDAQAB -----END PUBLIC KEY----- """ # 公钥加密 def rsa_encode(message, public_key): rsakey = RSA.importKey(public_key) # 导入读取到的公钥 cipher = PKCS1_v1_5.new(rsakey) # 生成对象 # 通过生成的对象加密message明文,注意,在python3中加密的数据必须是bytes类型的数据,不能是str类型的数据 cipher_text = base64.b64encode( cipher.encrypt(message.encode(encoding="utf-8"))) # 公钥每次加密的结果不一样跟对数据的padding(填充)有关 return cipher_text.decode() # 私钥解密 def rsa_decode(cipher_text, private_key): rsakey = RSA.importKey(private_key) # 导入读取到的私钥 cipher = PKCS1_v1_5.new(rsakey) # 生成对象 # 将密文解密成明文,返回的是一个bytes类型数据,需要自己转换成str text = cipher.decrypt(base64.b64decode(cipher_text), "ERROR") return text.decode() if __name__ == '__main__': message = "你好,世界!" cipher = rsa_encode(message, public_key) print(cipher) # 输出是一行,天长了,折行显示 # vyuQHYhjYrPZK6pJMbbcjb1Q7JTLyRDPIoV7z6OkMQsuBNk0++C # tb3dzo0EvjUhaSOZnE9LjODgEqeTR7I459cDp8izmb970BnKj74 # 6SBtGunK24nudW86ek0JXdYsF5T/IPaphU8d56rdjW+wZv7OfSL # m2HgXLXCI6NbJuJXhg= msg = rsa_decode(cipher, private_key) print(msg) # 你好,世界!
人生苦短,我用python!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2018-11-21 git笔记