Вот тест:Почему несколько вызовов в 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
, значение всегда одинаково, и поэтому консоль печатает «True». Но при использовании опции Pkcs12 значение всегда сильно отличается. Почему это так, и есть ли способ сделать их одинаковыми?
Я думаю, что файлы PKCS12 содержат симметричный ключ; поскольку вы используете перегрузку X509Certificate2.Export, который не принимает пароль для ключа PKCS12, он может генерировать некоторые случайные биты от вашего имени. Вы пытались использовать одну из экспортных перегрузок, которые принимают строку пароля? – beefarino