6

我在 C# 中进行 EBICS 实现,我需要将我的三个SHA256 格式证书的哈希发送到我的银行,以便启用 EBICS 链接。

我在 C# 中使用 BouncyCastle 生成了它们,现在我有了一个X509Certificate2对象。

因此,为了散列我的证书,我使用了以下代码:

String HashCertificate = Certificat.GetCertHashString();

他返回给我以下结果:

21952A5F79CA3232A656794EE4532BECF5AE3960

但长度与银行证书哈希的长度不匹配:

57436AD3D09989ED74F4FCCDBF7668C43F8BF87C933F90B065ED442A22E5B0BF

所以我认为该函数以SHA1GetCertHashString()格式返回证书的哈希值,我不知道如何在SHA256中对其进行哈希处理。

你能帮我吗 ?

先感谢您

4

1 回答 1

9

正如MSDN 所说, GetCertHashString 方法总是

以十六进制字符串形式返回 X.509v3 证书的 SHA1 哈希值。

无论签名算法如何,因为它是证书存储内部使用的 Windows 特定指纹。

您可以通过从其RawData属性访问证书内容来计算任何其他哈希,例如对于 SHA256:

using (var hasher = SHA256.Create())
{
    var hash = hasher.ComputeHash(cert.RawData);
    Console.WriteLine(BitConverter.ToString(hash));
}
于 2016-01-06T14:59:45.043 回答