RSA加解密中,已知明/密文,如何得到公/私钥?
最近在学习RSA加解密。
http://blog.csdn.net/liuhuabai100/article/details/7585879
突发奇想:公司A使用公钥,客户B使用私钥。倘若B不小心将私钥丢失(文件误删等情况),如何处置?
① A把私钥重新给B发一份;
② A重新生成一个公/私钥,给B发一份。
但这两种情况都有私钥被窃的风险~~如果:A给B发送一段简单的密文,同时电话告知其明文,并告知B明/密文的分组长度,B能不能根据这些信息得到密钥呢?反之,若A丢失公钥,同样能不能得到公钥呢?
------解决方案--------------------我觉得RSA的根本就是B生成公钥和私钥,让后公开公钥,A用公钥加密消息后发送给B,B解密,若B丢失私钥可以重新生成
------解决方案--------------------私钥只有自己才知道,别人知道了还能叫私钥?
私钥和公钥是自己生成的密钥对。
倘若自己把私钥弄丢了 自己再生成一对密钥呗!
网络上密钥对都是密钥管理中心托管的!,密钥不存在轻易丢失的情况。
------解决方案--------------------私钥是不允许被窃的!
私钥是公钥密码学安全的命脉,如果私钥遗失或者被窃,那是不可原谅的!
私钥遗失好你自己把银行卡跟一张写有银行卡密码的纸粘在一起掉了的后果一样严重!
这样想好了,如果数字认证中心 Versign CA 的私钥遗失的话,这带来的损失就不能以千亿美元来计算的了!
------解决方案--------------------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并不影响解密运算。