如何获取一个SHA-256证书的Thumbprint?

9

如何获取证书的SHA-256指纹?

SHA-256证书有两个指纹,我能够检索到主要指纹,但无法检索到SHA-256指纹。


在Windows上,signtool程序允许将2个x509证书添加到文件以进行authenticode哈希。第一个证书是SHA1证书-用于向后兼容。然后有一个未经身份验证的属性,其中包含第二个SHA 256证书。因此有2个指纹。 - mksteve
我想访问/读取那个SHA 256指纹?你能帮我找到相应的类或属性吗(使用C#)?谢谢您的回复。 - Mahadev
你能解释一下你的任务吗?不太清楚你想从哪里获取SHA256指纹?是从证书本身?签名内容?还是其他地方? - Crypt32
@CryptoGuy 我想从证书中提取SHA 256指纹。 - Mahadev
指纹。拇指印。取消整个事情 - Peter Mortensen
2个回答

3
如果您想获得证书的SHA-256指纹,您需要进行一些手动操作。内置的Thumbprint属性仅支持SHA-1
您需要使用SHA-256类并计算证书内容的哈希值:
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

namespace MyNamespace {
    class MyClass {
        public static String GetSha2Thumbprint(X509Certificate2 cert) {
            Byte[] hashBytes;
            using (var hasher = new SHA256Managed()) {
                hashBytes = hasher.ComputeHash(cert.RawData);
            }
            return hashBytes.Aggregate(String.Empty, (str, hashByte) => str + hashByte.ToString("x2"));
        }
    }
}

如果需要,您可以将此代码转换为扩展方法。

谢谢您的回复,但是这段代码没有给出证书正确的SHA-256指纹。 - Mahadev
你能支持一下你的说法吗? - Crypt32
我的问题很简单,我想要任何证书的SHA 256指纹。 - Mahadev
正确的代码如下: public static String GetSha2Thumbprint(X509Certificate2 cert) { Byte[] hashBytes; using (var hasher = new SHA256Managed()) { hashBytes = hasher.ComputeHash(cert.RawData); } string result = BitConverter.ToString(hashBytes).Replace("-", string.Empty).ToLower(); return result; } - Mahadev
1
我认为@Crypt32在原始答案中有一个很好的设计,但可能错过了最后一段代码。我并不总是需要绝对可复制粘贴的代码片段来发现它们的价值。如果我从SO中提取代码,我总是准备好进行审查、测试和调整,直到它表现良好,然后再提交到源代码控制。 - Skip Saillors
显示剩余5条评论

0

使用:

public static String GetSha2Thumbprint(X509Certificate2 cert)
{
    Byte[] hashBytes;
    using (var hasher = new SHA256Managed())
    {
        hashBytes = hasher.ComputeHash(cert.RawData);
    }
    string result = BitConverter.ToString(hashBytes)
        // This will remove all the dashes in between each two characters
    .Replace("-", string.Empty).ToLower();
    return result;
}

在获取哈希字节后,您需要进行位转换。

这篇文章也对我有所帮助:在Windows Forms中使用SHA-256散列文本


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