首先,那不是打字错误,我想解密使用公众键。这样做的目的是挑战第三方,以确保他们确实拥有与公钥对应的私钥。基本上,我会发送一些随机数据,他们会用他们的私钥对它进行加密,然后使用公钥对其进行解密,并将解密后的值与我发送的随机数据进行比较。我相信这是一个非常标准的公钥加密程序,但由于某些原因,使用公钥解密似乎是禁忌。使用RSA公开密钥解密数据
我只是在.NET 2.0中使用RSACryptoServiceProvider
。但是,当我拨打Decrypt
时,它会显示CryptographicException
,并显示消息Bad Key
。关键是不坏(我可以Encrypt
没有问题),但它似乎不会让我只用公钥解密。是什么赋予了?这一定是可以做到的。
*“但我的理解是签名实际上只是使用私钥进行加密”* - 嗯,是,不是。理论上是。然而,在实践中,您首先对输入进行散列,使用私钥对* hash *进行加密,然后将其附加到消息中,因为RSA在计算上非常昂贵。事实上,实际上,在加密时,您甚至不用公钥对输入进行加密:您需要对大型随机数进行加密,并将该数字用作快速对称加密算法(如AES)的密钥。 – 2010-06-25 22:25:43
@BlueRaja,我实际上意识到这一点(散列和RSA仅用于交换随机会话密钥)。这就是为什么我引用'SignHash'的一部分。我的观点是“签署x”==“用私钥加密x”。无论x是散列还是真实消息,这都适用。 – 2010-06-25 22:36:38
签名和加密的主要区别在于,当你*加密*时,你用随机数据填充(以防止明文猜测攻击);当*符号*时,您将填充具有预定义结构的数据(以防止选择余数的攻击)。在验证签名时,验证填充数据是否正确也很重要。 – caf 2010-06-26 13:43:42