Почему множественные вызовы X509Certificate2.Export (Pkcs12) возвращают разные результаты? - PullRequest
3 голосов
/ 09 сентября 2011

Вот тест:

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 значение всегда сильно отличается. Почему так, и есть ли способ сделать их одинаковыми?

1 Ответ

6 голосов
/ 09 сентября 2011

Файл (данные) PKCS # 12 зашифрован, даже если вы ввели нулевой пароль, поэтому каждый раз будет генерироваться новый вектор инициализации (IV) (из случайных данных), поэтому выходные данные никогда не будут одинаковыми.Таким образом, вы не сможете сделать их идентичными, от нескольких вызовов до экспорта.

OTOH сертификаты подписаны из центра сертификации (CA) и не могут быть изменены без нарушения их подписи.Они всегда будут идентичны.

Примечание: я не вспоминаю случайным образом, но могут быть определены другие случайные структуры (например, связанные с сумкой), спецификация PKCS # 12 немного велика.

...