CreateSignature(HashAlgorithm)实现了什么



我正在使用一些旧代码,我不明白在创建签名哈希时做了什么。作者使用了这个实现:

AsymmetricSignatureFormatter.CreateSignature(HashAlgorithm)

我能找到的所有例子和所有微软文档都使用了另一种实现:

AsymmetricSignatureFormatter.CreateSignature(byte[]HashedDataValue)

我知道第二种方法是对一些用户数据的散列进行签名。在接收者处,我们可以对收到的纯文本进行重新散列,并将其与此发送的签名版本进行比较,以确认其没有更改。但是,第一个尝试的方法是什么?似乎没有发送签名的数据,只有"算术"的签名版本,但实际签名的是什么?它对Hash.Hash字节数组进行签名吗?但如果是这样,那么在接收器处就没有纯文本字节数组来重新散列和检查发送的散列。我怀疑我对这项实施的目的有一些根本性的误解。

事实证明,使用这种形式:

AsymmetricSignatureFormatter.CreateSignature(HashAlgorithm)

您需要对HashAlgorithm对象做一些准备工作。HashAlgorithm对象在内部存储它"散列"的最后一个对象的散列。

因此,如果algHashAlgorithm并且userData是字节阵列,那么alg.ComputeHash(userData)将散列存储在CCD_ 8对象内。现在我们可以使用以下形式的方法对userData的哈希进行签名:

AsymmetricSignatureFormatter.CreateSignature(HashAlgorithm)

最新更新