3

下面是測試:爲什麼多次調用X509Certificate2.Export(Pkcs12)會返回不同的結果?

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叫,該值始終是相同的,所以版畫控制檯「真」。但是當使用Pkcs12選項時,該值總是非常不同。爲什麼會這樣,並且有辦法讓它們變得一樣嗎?

+1

我認爲PKCS12文件包含一個對稱密鑰;由於您使用的X509Certificate2.Export的重載不接受PKCS12密鑰的密碼,因此它可能會以您的名義生成一些隨機位。您是否嘗試過使用接受密碼字符串的導出重載之一? – beefarino

回答

6

即使您提供了空密碼,PKCS#12文件(數據)也會被加密,所以每次(隨機數據)都會生成一個新的初始化矢量(IV),所以輸出永遠不會相同。因此,從多次呼叫到導出,您無法使它們一致。

OTOH證書是從證書頒發機構(CA)簽署的,不能在不破壞簽名的情況下進行更改。他們將永遠是相同的。

注意:我不記得手動,但可能會定義其他隨機結構(例如與袋有關的),PKCS#12規格有點大。

相關問題