2013-05-06 33 views
2

由于RSACryptoServiceProvider.VerifyHash验证已经散列的消息 - 为什么它需要知道使用了哪个散列算法?为什么RSACryptoServiceProvider.VerifyHash有一个“哈希算法标识符”参数?

当询问SignHash方法时,it was suggested表示原因有for communicating the hash(而不是实际用于签名)。但在这种情况下,这不会解释它。 (因为它不是out参数。)

+0

@DanielHilgarth从[MSDN](http://msdn.microsoft.com/zh-cn/library/142k6c98%28v=vs.100%29.aspx):“通过确定数字签名是否有效使用提供的公钥将签名中的哈希值与提供的**哈希**值进行比较。 - 参数是_already_哈希。 – ispiro 2013-05-06 09:45:40

回答

3

这是因为签名的PKCS#1编码包括RSA加密数据块中的散列函数OID。

+0

谢谢。所以如果我输入了错误的算法 - 它会告诉我它失败,只是因为算法不匹配。如果是这样的话,那么'SignHash'中的算法参数的原因似乎也是出于同样的原因,并且_not_用于在链接的答案中建议的散列通信。我对你有正确的理解吗? – ispiro 2013-05-06 09:55:33

+0

据我所知,在签名中包含散列OID的原因也是为了保护 - 如果我们有相同散列长度的较弱散列算法,我们可以(理论上)修改签名数据并产生相同的签名,使用其他哈希算法。 – 2013-05-06 10:14:31

+0

谢谢。 – ispiro 2013-05-06 10:37:30

相关问题