【问题标题】:Why do multiple calls to X509Certificate2.Export(Pkcs12) return different results?为什么多次调用 X509Certificate2.Export(Pkcs12) 返回不同的结果?
【发布时间】:2011-11-14 00:32:07
【问题描述】:

这是一个测试:

var decoded = Convert.FromBase64String(certificateBase64Encoded);
var certificate = new X509Certificate2(decoded, (string)null, X509KeyStorageFlags.Exportable);

var x = Convert.ToBase64String(certificate.Export(X509ContentType.Pkcs12));
var y = Convert.ToBase64String(certificate.Export(X509ContentType.Pkcs12));

Console.WriteLine(x == y);

当使用X509ContentType.Cert 调用时,值始终相同,因此控制台打印“True”。但是当使用 Pkcs12 选项时,值总是有很大的不同。为什么会这样,有没有办法使它们相同?

【问题讨论】:

  • 我认为 PKCS12 文件包含对称密钥;由于您使用的是 X509Certificate2.Export 的重载,它不接受 PKCS12 密钥的密码,因此它可能会代表您生成一些随机位。您是否尝试过使用接受密码字符串的导出重载之一?

标签: security cryptography x509certificate certificate x509certificate2


【解决方案1】:

PKCS#12 文件(数据)是加密的,即使您提供了一个空密码,所以每次都会(从随机数据)生成一个新的初始化向量 (IV),因此输出永远不会相同。因此,在多次调用 Export 时,您将无法使它们完全相同。

OTOH 证书是由证书颁发机构 (CA) 签署的,并且在不破坏其签名的情况下无法更改。它们总是相同的。

注意:我不记得了,但可能定义了其他随机结构(例如与包相关的),PKCS#12 规范有点大。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2012-07-28
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多