Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么rsacryptserviceprovider.VerifyHash有一个“;哈希算法标识符”;参数_C#_.net_Cryptography_Signing_Rsacryptoserviceprovider - Fatal编程技术网

C# 为什么rsacryptserviceprovider.VerifyHash有一个“;哈希算法标识符”;参数

C# 为什么rsacryptserviceprovider.VerifyHash有一个“;哈希算法标识符”;参数,c#,.net,cryptography,signing,rsacryptoserviceprovider,C#,.net,Cryptography,Signing,Rsacryptoserviceprovider,既然验证了一个已经散列的消息,为什么它需要知道使用了哪个散列算法 当询问SignHash方法时,说明原因(并非用于签名中)。但这并不能解释这种情况。(因为它不是out参数。)这是因为签名的PKCS#1编码在RSA加密的数据块中包含哈希函数OID。@DanielHilgarth From:“通过使用提供的公钥确定签名中的哈希值并将其与提供的哈希值进行比较,验证数字签名是否有效。”-参数已经是散列。谢谢。因此,如果我输入了错误的算法,它会告诉我,它失败仅仅是因为算法不匹配。如果是这样的话,SignH

既然验证了一个已经散列的消息,为什么它需要知道使用了哪个散列算法


当询问
SignHash
方法时,说明原因(并非用于签名中)。但这并不能解释这种情况。(因为它不是
out
参数。)

这是因为签名的PKCS#1编码在RSA加密的数据块中包含哈希函数OID。

@DanielHilgarth From:“通过使用提供的公钥确定签名中的哈希值并将其与提供的哈希值进行比较,验证数字签名是否有效。”-参数已经是散列。谢谢。因此,如果我输入了错误的算法,它会告诉我,它失败仅仅是因为算法不匹配。如果是这样的话,
SignHash
中的算法参数的原因似乎也是出于同样的原因,而不是为了传递我链接到的答案中建议的散列。我对你的理解正确吗?据我所知,在签名中包含哈希OID的原因也是为了保护-如果我们有具有相同哈希长度的较弱哈希算法,我们可以(理论上)使用其他哈希算法修改签名数据并生成相同的签名。谢谢。​​​​​​​​​​​​​​​​​​​​​​​​​+1是的,就是这样。另请参见ISO 9796,其中哈希ID需要在带外通信,即使它可能存在于签名中。否则,攻击者可能会迫使您使用已损坏的哈希函数接受签名。通常风险不大,但安全总比后悔好。