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

を使用して呼び出された場合X509ContentType.Cert、値は常に同じであるため、コンソールは「True」と出力します。ただし、Pkcs12オプションを使用する場合、値は常にまったく異なります。それはなぜですか、そしてそれらを同じにする方法はありますか?

4

1 に答える 1

6

nullパスワードを指定した場合でも、PKCS#12ファイル(データ)は暗号化されるため、(ランダムデータから)毎回新しい初期化ベクトル(IV)が生成されるため、出力が同じになることはありません。そのため、Exportを複数回呼び出しても、それらを同一にすることはできません。

OTOH証明書は認証局(CA)から署名されており、署名を壊さずに変更することはできません。それらは常に同一になります。

注:手に負えないことは思い出せませんが、他のランダムな構造が定義されている可能性があります(バッグ関連など)。PKCS#12の仕様は少し大きいです。

于 2011-09-09T19:15:38.497 に答える