3

这是一个测试:

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);

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

4

1 回答 1

6

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

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

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

于 2011-09-09T19:15:38.497 回答