我在C#中使用EBICS实现,我需要向我的银行发送SHA256格式的三个证书的哈希值,以便启用EBICS链接.
我使用BouncyCastle在C#中生成它们,现在我有一个X509Certificate2对象.
为了散列我的证书,我使用了以下代码:
String HashCertificate = Certificat.GetCertHashString();
他还给我以下结果:
21952A5F79CA3232A656794EE4532BECF5AE3960
但是长度与银行证书的散列长度不匹配:
57436AD3D09989ED74F4FCCDBF7668C43F8BF87C933F90B065ED442A22E5B0BF
所以我认为GetCertHashString()函数以SHA1格式返回证书的哈希值,我不知道如何在SHA256中哈希它.
你能帮我吗 ?
先感谢您
解决方法:
始终为MSDN says GetCertHashString方法
Returns the SHA1 hash value for the X.509v3 certificate as a hexadecimal string.
无论签名算法如何,因为它是certifcates商店内部使用的Windows特定指纹.
您可以通过从其RawData属性访问证书内容来计算任何其他哈希,例如对于SHA256:
using (var hasher = SHA256.Create())
{
var hash = hasher.ComputeHash(cert.RawData);
Console.WriteLine(BitConverter.ToString(hash));
}