да, звучит весьма глупо. но так и есть.
предположим есть у нас сертификат 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 либы мне удалось получить нужный ключ, но она не бесплатная. Для моих целей не подходит.