非对称加密(RSA)
非对称加密.加密和解密的秘钥不是同一个秘钥.这里需要两把钥匙.一个公钥,一个私钥.公钥发送给客户端.
发送端用公钥对数据进行加密.再发送给接收端,接收端使用私钥来对数据解密.由于私钥只存放在接受端这边.
所以即使数据被截获了.也是无法进行解密的.
公钥和私钥
常见的非对称加密算法:RSA,DSA等等,我们就介绍一个.RSA加密,也是最常见的一种加密方案
- 创建公钥和私钥
Copy Highlighter-hljs
| from Crypto.PublicKey import RSA |
| |
| |
| key = RSA.generate(1024) |
| |
| with open('rsa.public_key.pem', 'wb') as f: |
| f.write(key.publickey().export_key()) |
| |
| with open('rsa.private_key.pem', 'wb') as f: |
| f.write(key.export_key()) |
- 数据加密
Copy Highlighter-hljs
| |
| |
| from Crypto.PublicKey import RSA |
| from Crypto.Cipher import PKCS1_v1_5 |
| import base64 |
| |
| data = "我喜欢你" |
| with open("rsa.public_key.pem", 'r') as f: |
| public_key = f.read() |
| |
| rsa = RSA.importKey(public_key) |
| |
| cipher = PKCS1_v1_5.new(rsa) |
| |
| encrypt_data= cipher.encrypt(data.encode()) |
| |
| base64_encrypt_data = base64.b64encode(encrypt_data) |
| print('加密后:', base64_encrypt_data) |
| print('加密后字符串:', base64_encrypt_data.decode()) |
解密
Copy Highlighter-hljs
| import base64 |
| from Crypto.PublicKey import RSA |
| from Crypto.Cipher import PKCS1_v1_5 |
| |
| |
| base64_encrypt_data = "KS6e5GzXN9lhSOtJnaF+MckXLgFI07nzyC1MvQmOaeIDzfAcPzcvyXftrpsZBjh9qWgbhKVMR31RRlWce16lh7iF1/uhHY/gxBDH5RYj1sifEjTrujdiFzNHwUFNdFtPfMO2U4QCLc5o1jp56+3E1guEKLanRHicfZ6cUkldUqY=" |
| |
| |
| base64_decrypt_data = base64.b64decode(base64_encrypt_data) |
| |
| |
| with open("rsa.private_key.pem", 'r') as f: |
| private_key = f.read() |
| |
| |
| rsa_key = RSA.importKey(private_key) |
| |
| cipher = PKCS1_v1_5.new(rsa_key) |
| |
| decrypt_text = cipher.decrypt(base64_decrypt_data, None) |
| |
| |
| |
| print(decrypt_text.decode('utf-8')) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2021-07-16 python 整数反转
2021-07-16 python 字符串反转