对于RSA而言,私钥加密公钥解密用来签名验证,公钥加密私钥解密则用来加密数据,那么现在如果我在生成两把钥匙的时候,把私钥公开,把公钥自己留着,是否可以把私钥当公钥使用,公钥当私钥使用?
目前我只知道,私钥要比公钥长,而且它们都有上下类似--public--的文字环绕,除了这些,它们是否有真正的本质区别?
对于RSA而言,私钥加密公钥解密用来签名验证,公钥加密私钥解密则用来加密数据,那么现在如果我在生成两把钥匙的时候,把私钥公开,把公钥自己留着,是否可以把私钥当公钥使用,公钥当私钥使用?
目前我只知道,私钥要比公钥长,而且它们都有上下类似--public--的文字环绕,除了这些,它们是否有真正的本质区别?
如果你自己实现了算法,当然没问题。
但是如果你是用Openssl之类的就不行。因为Openssl把生成公、私钥用的东西和私钥全部存在私钥pem里了。并且openssl的公钥e
固定为65537。
> ~ > openssl genrsa
Generating RSA private key, 2048 bit long modulus
............................................................................................................................................................................................................+++
...........................................................+++
e is 65537 (0x10001)
-----BEGIN RSA PRIVATE KEY-----
......
理论上,KeyGen得到的是(e,d,n),(e,d)哪个作为公钥都是可以的,你公开的那个就是公钥,保留的那个就是私钥。
但实现中出于性能考虑,e是选好的e=65537(一开始是e=3,但是有小指数攻击的问题),这样e就只能作为公钥了。
用的是openssl的话,在知道私钥的情况下,直接用下面命令就能生成公钥了:
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
所以,你公开了私钥的话,相当于把公钥也告诉他们了
原理上应该是可以的,实现上就不知道了。
公钥 (n, e)
私钥 (n, d)
只要 ed = kφ(n)+1 就行,随机生成 e 和 d 中的一个,算出另一个。反过来用也一样。