rsa原理: 现有公钥 (n,e)和私钥(n,d) 将原文m加密成密文c
// 公钥加密公式
c = ( m^e ) mod n
// 私钥钥解密公式
m = ( c^d ) mod n
同样的公式把c和m对调就是私钥加密公钥解密了,所以我得出的结论是公钥私钥是对等的,是可以做到私钥加密公钥解密的,这一点node-rsa有支持。 关于私钥签名公钥验证,实际上是不是就是相当于
// 签名
const signature = rsa.encryptPrivate(sha256(data));
// 验证
if(rsa.decryptPublic(signature) === sha256(data)) {
console.log('验证成功');
}
如果说公钥私钥是对等的话,实际上是不是也可以做到公钥签名,私钥验证?不知道为什么node-rsa没有实现这个方法,这是出于什么考虑呢?还是是我想的有问题? 关于这个rsa网上的很多博客都是说他只有两个功能,一个是公钥加密,私钥解密。一个是私钥签名,公钥验证。这是不是也是有问题的?
不是理论上,PKI 体系设计就是如此(公钥私钥是对等的)。 密钥对,一个加密/签名,另外一个解密/验签。 并未规定或者设计为只能用私钥加密/签名。
我给你发个信息,使用我的私钥加密/签名是为了证明是我操作的, 而无法证明是发给你的。 如果要证明是发给你的,就必须用你的公钥来加密/签名——总不可能用你的私钥来执行这个操作吧。
@waitingsong 你的意思是不是说公钥签名没有意义
@974806047 怎么会没意义,你再看看我二楼的回复: 如果我要证明这个信息是专门发给你(而不是其它人),我该怎么办?
@waitingsong 我大概懂了,谢谢你!
@974806047 进一步,如果我发给你的信息只能你看到(其他人都看不到),又该如何?
如果我要证明这个信息是专门发给你(而不是其它人),我该怎么办?
我的理解是,把接收者的信息放在要发送的数据里,对他签名发送,类似于jwt的方式。
进一步,如果我发给你的信息只能你看到(其他人都看不到),又该如何?
如果是单方向传递的话,公钥加密,私钥解密就是严格保密的。如果是双方向传递的话,应该要么是像https一样先用rsa再用aes,或者就直接用两对公密钥,不知道这个理解对不对?
兄弟,可以的话可以加一下你联系吗,这里不能私聊交流太慢了,我的用户名就是我的qq号,蟹蟹!