RSA加解密中,已知明/密文,如何得到公/私钥?

liuhuabai100 2012-05-21 01:22:31
最近在学习RSA加解密。
http://blog.csdn.net/liuhuabai100/article/details/7585879
突发奇想:公司A使用公钥,客户B使用私钥。倘若B不小心将私钥丢失(文件误删等情况),如何处置?
① A把私钥重新给B发一份;
② A重新生成一个公/私钥,给B发一份。
但这两种情况都有私钥被窃的风险~~如果:A给B发送一段简单的密文,同时电话告知其明文,并告知B明/密文的分组长度,B能不能根据这些信息得到密钥呢?反之,若A丢失公钥,同样能不能得到公钥呢?
...全文
814 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
上帝的无名指 2012-05-28
  • 打赏
  • 举报
回复
A给B发数据 用B的公钥加密,B用自己的私钥解密。

内容来源于网上,RSA用于内容加密和数字签名。

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密钥对。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互换使用,即:
A=B^e2 mod n;B=A^e1 mod n;


补充回答:
对明文进行加密,有两种情况需要这样作:
1、您向朋友传送加密数据,您希望只有您的朋友可以解密,这样的话,您需要首先获取您朋友的密钥对中公开的那一个密钥,e及n。然后用这个密钥进行加密,这样密文只有您的朋友可以解密,因为对应的私钥只有您朋友拥有。
2、您向朋友传送一段数据附加您的数字签名,您需要对您的数据进行MD5之类的运算以取得数据的"指纹",再对"指纹"进行加密,加密将使用您自己的密钥对中的不公开的私钥。您的朋友收到数据后,用同样的运算获得数据指纹,再用您的公钥对加密指纹进行解密,比较解密结果与他自己计算出来的指纹是否一致,即可确定数据是否的确是您发送的、以及在传输过程中是否被篡改。

密钥的获得,通常由某个机构颁发(如CA中心),当然也可以由您自己创建密钥,但这样作,您的密钥并不具有权威性。

计算方面,按公式计算就行了,如果您的加密强度为1024位,则结果会在有效数据前面补0以补齐不足的位数。补入的0并不影响解密运算。
liuhuabai100 2012-05-26
  • 打赏
  • 举报
回复
额……看了3楼和4楼的回复,我突然有了点醒悟~~⊙﹏⊙b汗!
我最开始对RSA算法的理解是:公司A用公钥加密,然后发给客户B,客户B然后用私钥解密。。
看了你们的回复,原来不是这样子的啊。。。是公司A自己生成公钥和私钥,然后把公钥发布给全体客户,然后私钥自己保存。。。客户给公司发送公钥加密的数据,公司用私钥解密;公司用私钥加密数据,客户用公钥解密。。。不知我这样理解对吗?

(如果我这样理解正确的话,那7楼的问题就是:已知明密文,还有明密文的分组长度,也没办法得到公钥,是吗?)
liuhuabai100 2012-05-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
只有明文和密文就想知道公钥和私钥了?这也太搞笑了吧?

要能这样的话,RSA 在出现的第一天就被破解了!

不要说 RSA 了,所有的加密算法都不可能做到只有明文和密文就能计算出密钥的!
[/Quote]
比如说:我使用的RSA算法中,使用明文的分组长度是4字节,加密后的密文长度是64字节。
然后我告诉对方:
明文是:aaaa
密文是:********(64个字节东东)

你的意思是说,即使是这样的情况,对方也无法知道他原来的私钥是什么了?
  • 打赏
  • 举报
回复
私钥是不允许被窃的!

私钥是公钥密码学安全的命脉,如果私钥遗失或者被窃,那是不可原谅的!

私钥遗失好你自己把银行卡跟一张写有银行卡密码的纸粘在一起掉了的后果一样严重!

这样想好了,如果数字认证中心 Versign CA 的私钥遗失的话,这带来的损失就不能以千亿美元来计算的了!
  • 打赏
  • 举报
回复
只有明文和密文就想知道公钥和私钥了?这也太搞笑了吧?

要能这样的话,RSA 在出现的第一天就被破解了!

不要说 RSA 了,所有的加密算法都不可能做到只有明文和密文就能计算出密钥的!
上帝的无名指 2012-05-25
  • 打赏
  • 举报
回复
私钥只有自己才知道,别人知道了还能叫私钥?

私钥和公钥是自己生成的密钥对。

倘若自己把私钥弄丢了 自己再生成一对密钥呗!

网络上密钥对都是密钥管理中心托管的!,密钥不存在轻易丢失的情况。
bxuanzhao 2012-05-25
  • 打赏
  • 举报
回复
我觉得RSA的根本就是B生成公钥和私钥,让后公开公钥,A用公钥加密消息后发送给B,B解密,若B丢失私钥可以重新生成
aduwu_para 2012-05-21
  • 打赏
  • 举报
回复
用你第一次让B知道密钥的方法!
liuhuabai100 2012-05-21
  • 打赏
  • 举报
回复
怎么没人理我呢?好尴尬啊~~~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧