在C#中使用SHA 256哈希X509证书

7

我在C#上开发了一个EBICS实现,需要将我的三个证书的哈希以SHA256格式发送给我的银行,以便启用与EBICS的链接。

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

为了对我的证书进行哈希,我使用了以下代码:

String HashCertificate = Certificat.GetCertHashString();

他返回给我以下结果:

21952A5F79CA3232A656794EE4532BECF5AE3960

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

57436AD3D09989ED74F4FCCDBF7668C43F8BF87C933F90B065ED442A22E5B0BF

因此,我认为 GetCertHashString() 函数返回的是以SHA1格式哈希的证书,我不知道如何将其哈希为SHA256

请问你能帮帮我吗?

提前感谢您。

1个回答

10
根据MSDN文档,GetCertHashString方法总是返回X.509v3证书的SHA1哈希值作为十六进制字符串,无论签名算法如何,因为它是证书存储中内部使用的Windows特定指纹。您可以通过访问证书的RawData属性来计算任何其他哈希值,例如SHA256:
using (var hasher = SHA256.Create())
{
    var hash = hasher.ComputeHash(cert.RawData);
    Console.WriteLine(BitConverter.ToString(hash));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接