Как получить Public Key сертификата идентичный с выводу openssl? да, звучит весьма глупо. но так и есть. предположим есть у нас сертификат crt.cer в Base64 далее запускаю openssl x509 -in crt.cer -pubkey и на выходе получаю (например длиной 294 байта):MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUihVNnWYpu3uJmcLy+PBecKu4ziVD7OIeZ/V+tJkXbc5+6OW8G+QDtJKuJkkuxGNLBNmLHbCyXsJ/US3kKkU7/7yK7jfWRNdqAKJdDTVxsWnxlo+/28ScGrAV6wK2bbK8GQBpsYRn1HKGCGceWIBCSqUfI7rwgwDnvqcW5PeivORd4+or5DdhgUMwiV5Vr2fvdcAiQR1CKgMphxO4+OmZ4khpB/HT/xS4FscvfFsSBLM37jBMrnhY5yNKPeHZB2eYvehnnw22NFHJNksa+vVFXL9aJcZWJc/bqqlhlhL8eLdYSR/KA006PSInW8yWtd4IFVKJ1Moa41gCUZL81voQIDAQAB Затем тоже самое делаю в коде UWP приложения:X509Certificate2 certificate = new X509Certificate2(certificateBlob); var truePublicKey = Convert.ToBase64String(certificate.GetPublicKey()); на выходе нечто вроде этого (длиной уже 270 байт)MIIBCgKCAQEAvUihVNnWYpu3uJmcLy+PBecKu4ziVD7OIeZ/V+tJkXbc5+6OW8G+QDtJKuJkkuxGNLBNmLHbCyXsJ/US3kKkU7/7yK7jfWRNdqAKJdDTVxsWnxlo+/28ScGrAV6wK2bbK8GQBpsYRn1HKGCGceWIBCSqUfI7rwgwDnvqcW5PeivORd4+or5DdhgUMwiV5Vr2fvdcAiQR1CKgMphxO4+OmZ4khpB/HT/xS4FscvfFsSBLM37jBMrnhY5yNKPeHZB2eYvehnnw22NFHJNksa+vVFXL9aJcZWJc/bqqlhlhL8eLdYSR/KA006PSInW8yWtd4IFVKJ1Moa41gCUZL81voQIDAQAB Если присмотреться повнимательнее, то видно что во втором случае спереди отрезан кусок данных, а в остальном они идентичны. Воспользовавшись онлайн декодером ASN1 данных можно заметить, что в C# приложении "отрезано все лишнее", но такой вариант мне не подходит. Возможно ли как-нибудь получить идентичный openssl результат? (желательно без написания своего ASN кодера/декодера). Что только не пробовал - не получается( А ключ нужен именно как в первом варианте, т.к. дальше считается хеш PS: С использованием Chillkat либы мне удалось получить нужный ключ, но она не бесплатная. Для моих целей не подходит.
Для получения Public Key сертификата в формате, аналогичном выводу openssl, вам нужно использовать метод ExportSubjectPublicKeyInfo класса X509Certificate2. Вот пример кода:
Этот код экспортирует открытый ключ сертификата в формате SubjectPublicKeyInfo, который будет совпадать с выводом openssl. Надеюсь, это поможет вам получить нужный результат без использования сторонних библиотек.
Для получения Public Key сертификата в формате, аналогичном выводу openssl, вам нужно использовать метод ExportSubjectPublicKeyInfo класса X509Certificate2. Вот пример кода:
X509Certificate2 certificate = new X509Certificate2(certificateBlob);byte[] publicKeyBytes = certificate.GetRSAPublicKey().ExportSubjectPublicKeyInfo();
string publicKeyBase64 = Convert.ToBase64String(publicKeyBytes);
Этот код экспортирует открытый ключ сертификата в формате SubjectPublicKeyInfo, который будет совпадать с выводом openssl. Надеюсь, это поможет вам получить нужный результат без использования сторонних библиотек.