网站首页 > 教程文章 正文
RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA公开密钥密码体制的原理是:
根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥 。
关于RSA的通俗的解释:
使用规定的方法生成一对密钥,一个作为私钥,一个作为公钥;
一段数据通过私钥加密,必须通过公钥解密;反之亦然。
私钥自己保管,公钥对外公开。
比如:理思录的私钥A(理思录),公钥B(理思录)
九赢百信的私钥C(九赢百信),公钥D(九赢百信)
比如:九赢百信希望发送一条信息M给理思录,不希望他人知晓传输的内容,即便获取了数据,也不能解析其中的内容。那么这个人就用公钥B(理思录)去加密这个信息M,变成了X。
当理思录收到了X,就用自己的私钥A(理思录)去解密,解密后才能看到真正的信息M。
这样,理思录可以收到信息M,可是并不知道信息是谁发出的。
为此,信息M在九赢百信发送信息之前,使用自己的私钥C(九赢百信)将信息M加密为N,可以附加自己的公钥信息,然后再通过公钥B(理思录)进行另外一次加密,成为P。
这样,当理思录收到P,之后,先用自己的私钥A(理思录)解密,然后使用公钥D(九赢百信)进行解密。
公钥的公布需要一些类的规定和程序,保证他是可信性。
双钥技术的加密和解密耗费的时间比较大,通常使用这种技术来传输密码,通过密码来解密要传输的数据。
现在用python调用库实现RSA密钥的生成。
安装:pip install rsa
#pip install rsa
import rsa
(pubkey,privkey)=rsa.newkeys(1024)
print(pubkey)
print(privkey)
pub=pubkey.save_pkcs1()
pubfile=open('public.pem','wb')
pubfile.write(pub)
pubfile.close()
pri=privkey.save_pkcs1()
privkey=open('private.pem','wb')
privkey.write(pri)
privkey.close()
生成的文件如下图:
import rsa
# rsa加密
def rsaEncrypt(str):
# 生成公钥、私钥
(pubkey, privkey) = rsa.newkeys(512)
print("公钥:\n%s\n私钥:\n:%s" % (pubkey, privkey))
# 明文编码格式
content = str.encode("utf-8")
# 公钥加密
crypto = rsa.encrypt(content, pubkey)
return (crypto, privkey)
# rsa解密
def rsaDecrypt(str, pk):
# 私钥解密
content = rsa.decrypt(str, pk)
con = content.decode("utf-8")
return con
if __name__ == "__main__":
str, pk = rsaEncrypt("hello")
print("加密后密文:\n%s" % str)
content = rsaDecrypt(str, pk)
print("解密后明文:\n%s" % content)
===================== RESTART: E:/python code/其他/RSA_T01.py ====================
公钥:
PublicKey(9111873236249849209686819369076356655660892337807985520901675955833176249049269417595657300043866173262409777435981355116449943828841734063225123542228361, 65537)
私钥:
:PrivateKey(9111873236249849209686819369076356655660892337807985520901675955833176249049269417595657300043866173262409777435981355116449943828841734063225123542228361, 65537, 2265976623958985648099177290342958340692451948084205075295718673850940787996298407753473721435820250048228469715958524626179351450461377903271599676389673, 5159625978049603036154695303556767905690916535211950049558224975601481091096127691, 1765994914168999577067848938883684661085876986183189630983114088404405371)
加密后密文:
b'f\xbe\xb8\xfd\xa9#\n\x98\xc3\xc0{\xd0n\x17\x10\xfb^\xfd\xdf(\xb41\x1e\x06Ij\xd8\x9a\xd2P\xc2]H\xa4\xeb$\xbd+}b\xd4\x1a \xfb\xee:E\xd0r\x0e\xdcH\xb0v\xd8\xc4\xb1\x94Q\xda,\xc2\xbd\xdd'
解密后明文:
hello
- 上一篇: Windows 11上配置SSH客户端以建立反向代理
- 下一篇: 什么是私钥?
猜你喜欢
- 2025-03-10 什么是钱包?私钥代表什么?
- 2025-03-10 密码狗的数据保护计算原理
- 2025-03-10 如何给数据安全性较高的应用程序加密和解码
- 2025-03-10 2个AI助手对话说着说着就“加密”了
- 2025-03-10 自己个人拥有一个可以支付功能的网站?当然可以了!保姆级演示!
- 2025-03-10 常见的加密算法,以及各自的优缺点
- 2025-03-10 京东大佬问我,常用的信息加密算法有哪些?举例说明其用法与流程
- 2025-03-10 python散装笔记——123: 客户端与服务器之间套接字和消息加解密
- 2025-03-10 电子文档加密系统
- 2025-03-10 加解密的艺术
- 最近发表
-
- 绝区零:公测必看!300菲林兑换码、萌新补给一览!切勿踩坑!
- 事半功倍 轻松制作可交互移动原型
- LOL英雄联盟美服注册教材 教你玩转美服
- 「正点原子Linux连载」第五十八章Linux INPUT子系统实验(一)
- 如何轻松薅Cursor羊毛:用免手机号邮箱快速注册
- C/C++基础语法复习(一):C++与C语言的区别,主要有这些
- 永久免费的高配容器Clawcloud,超爽体验!
- Spaceship低价注册域名 | 每年5元不到 | XYZ域名 | 托管cloudflare
- 云杉网络DeepFlow基于Free5GC的方案示例
- alma8飞速搭建zabbix6、微信报警、windows、linux、交换机监控
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)