python RSA加密模块学习
RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。
解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者。加密都使用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文。
以甲要把信息发给乙为例,首先确定角色:甲为加密者,乙为解密者。首先由乙随机确定一个KEY,称之为密匙,将这个KEY始终保存在机器B中而不发出来;然后,由这个 KEY计算出另一个KEY,称之为公匙。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。接下来通过网络把这个公钥传给甲,甲收到公钥后,利用公钥对信息加密,并把密文通过网络发送到乙,最后乙利用已知的私钥,就对密文进行解码了。以上就是RSA算法的工作流程。
算法实现过程为:
1. 随意选择两个大的质数p和q,p不等于q,计算N=pq。
2. 根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。
3. 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。
4. 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。
5. 将p和q的记录销毁。
以上内容中,(N,e)是公钥,(N,d)是私钥。
使用方法:
1. You can use the
rsa.newkeys()
function to create a keypair1 2 | >>> import rsa >>> (pubkey, privkey) = rsa.newkeys( 512 ) |
2. Alternatively you can use rsa.PrivateKey.load_pkcs1()
and rsa.PublicKey.load_pkcs1()
to load keys from a file
>>> import rsa >>> with open('private.pem', mode='rb') as privatefile: ... keydata = privatefile.read() >>> privkey = rsa.PrivateKey.load_pkcs1(keydata)
3. 具体加密解密过程
import rsa # 生成随机密钥对 publicKey, privateKey = rsa.newkeys(512) message = "hello RSA" print("Before encrypted:", message) message = message.encode("utf-8") # 使用公钥对信息加密 cryptedMessage = rsa.encrypt(message, publicKey) print("After encrypted:\n", cryptedMessage) # 解密过程 message = rsa.decrypt(cryptedMessage, privateKey) message = message.decode("utf-8") print("After decrypted:", message)
加密后:
b'-\x8atl\xfe\xe4:\xbb\xf1\xdbu<\xca\xebP\xdba\xddK\xbd\x11\xff\x14\xd0]H\xc6\xc3\x18\xaf\x197\x18\xd9\xaf \xd6\xf0\xee\xf3\xc8\xdf\xa7U \xae\\\xdc\xfe\xceR\xe8:\x0c\xd7\x1cM)\xdc\x11!\xd2\xf0\xd3'
参考:https://stuvel.eu/python-rsa-doc/usage.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构