gpt4 book ai didi

c# - 证书的私钥导出为不同的值?

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:13 24 4
gpt4 key购买 nike

我已经创建了一个自签名证书 (pfx) 用于测试目的。

我可以通过以下方式导出 ist 公钥:

X509Certificate2 cer = new X509Certificate2();
X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);

var certificateCollection = store.Certificates.Find(...);
var cert = certificateCollection[0] ;
Console.WriteLine(Convert.ToBase64String(cert.Export( X509ContentType.Cert ), Base64FormattingOptions.InsertLineBreaks));

结果:

MIIDFTCCAf2gAw...........eFUpBB9C0/UNRmD7EAg==

这与 openssl 命令一致:

$ openssl pkcs12 -in domain.name.pfx -clcerts -nokeys -out domain.name.crt

结果:

-----BEGIN CERTIFICATE-----
MIIDFTCCAf2gAw........9C0/UNRmD7EAg==
-----END CERTIFICATE-----

但是,当我通过 C# 导出私钥时:

Convert.ToBase64String(cert.Export( X509ContentType.Pfx ), Base64FormattingOptions.InsertLineBreaks)

我得到:

MIIDFTCCAf2gAw............OVeFUpBB9C0/UNRmD7EAg==

使用 openssl 命令时:

$ openssl pkcs12 -in domain.name.pfx -nocerts -nodes -out domain.name.key

我得到:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w.........6HNjF2h7uuFdvbH2VAVg=
-----END PRIVATE KEY-----

问题:

为什么我在私钥中得到不同的结果?以及如何修复我的 C# 代码以产生与 openssl 的结果相同的结果?

(注意 - 我不是在谈论 -----begin/end keys----- boundries ,而是实际值。

附加信息,the PFX file

最佳答案

X509ContentType.Cert 表示是相同的,因为证书是静态结构。如果您循环导出它,您将始终得到相同的答案。

X509ContentType.Pfx 表示不同,因为 PFX 结构中有随机盐。每个证书一个,每个私钥一个,最后一个。如果您在循环中将相同的公共(public)+私有(private)对作为 PFX 导出,则每次都会不同(288 位随机数据​​)。

base64 数据的末尾是不同的,因为它包含最后一个盐和其余数据的 MAC(包括加密的证书盐和加密的 key 盐)。它还包含一个整数工作因子,Windows选择为2000,OpenSSL选择为2048;进一步区分 OpenSSL 和 Windows 导出。

所以您所看到的是设计使然。如果您需要稳定的导出,您将不得不做其他事情。如果您只是担心它们不同,那几乎可以肯定没问题。

关于c# - 证书的私钥导出为不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43779806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com