为什么SignHash需要知道使用的哈希算法?(Why does SignHash need to

2019-06-26 20:04发布

这可能是一个问题http://crypto.stackexchange.com ,但我想我会尝试在这里第一次的答案可能涉及到.NET,而不是加密算法本身。

在的RSACryptoServiceProvider类 ,有一个方法SignHash ,其中:

通过与私有密钥将其加密计算指定散列值的签名。

第一个参数是数据的哈希值(这似乎是公平的),但第二个是一个字符串,说明用于创建散列值的算法。

问题是为什么散列算法回事? 当然所有的方法需要做的是用自己的私钥加密给定值,并返回结果? 如果它确实需要知道,为什么不的RSACryptoServiceProvider有哪些做到了这一点(连同适当的验证方法)的方法?

Answer 1:

由于铱你为我沿着这里的行权思想。

接收者获得两件事情:

  • 该消息
  • 签名(由发送方的私钥加密)

为了验证邮件,收件人需要解密用发送者的公钥签名,并检查针对该消息的哈希值。

如果散列算法不是指定收件人,他们不知道如何哈希消息的方式,使他们无法验证它。

所以算法必须指定收件人。

在由发件人指定的顺序散列算法(谁知道签名是如何被创造),而不是由其他任何人修改,它需要包括签名里面,旁边的哈希加密。

因此,为了创建一个有用的签名,哈希算法需要加密散列时指定。



Answer 2:

例如,PKCS#1填充用于RSA签名意味着签署之前加入一个散列函数标识符的散列值。

依我之见,你正在使用的正是这种方法。 尝试设置与相同的另一种算法摘要长度,你会看到签名是不同的。



文章来源: Why does SignHash need to know what hash algorithm was used?