2013-05-06 104 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

相關問題