Почему открытый ключ PFX отличается при подписании pdf документа? - PullRequest
0 голосов
/ 10 октября 2019

Используя сертификат, который я создал, я подписал документ PDF с библиотекой iTextSharp.

Когда на панели подписи pdf я увижу публичную подпись, у меня есть следующая информация в шестнадцатеричном формате

pdf public key

Но когда я получаю открытый ключ из того же сертификата через мой код в c #

    var certificate = new X509Certificate2(@"C:\mycert.pfx", "pass");
    byte[] publicKey = certificate.PublicKey.EncodedKeyValue.RawData;

Результат в десятичном виде (преобразуется в гекса) отличается.

например, в байтовом массиве 5 в гекса составляет 130 - 82, но в pdf шестой ключ равен 0D в гекса

pdf public key

Что я делаюне так?

Спасибо и извините за мой английский.

1 Ответ

0 голосов
/ 10 октября 2019

Что касается причины расхождения, ваш вопрос является дубликатом этого вопроса ;ответ объясняет:

Разница в том, что Adobe представляет шестнадцатеричный дамп полного объекта SubjectPublicKeyInfo (открытый ключ, включая информацию об алгоритме и значение ключа), в то время как ваш код выводит только RSAPublicKey (сам ключ).

...

Подробнее читайте здесь.

Фактически вы можете распознать открытый открытый ключ в выводе Adobe Reader, он начинается в конце первой строки,

[...] 30 82 02

0A 02 82 02 01 00 FA 8B ...


Однако решение немного отличается, так как код в этом вопросе написан на Java.

В вашем коде используется класс System.Security.Cryptography.X509Certificates X509Certificate2. Насколько я понимаю, этот класс не раскрывает весь SubjectPublicKeyInfo сам по себе. Таким образом, здесь вы должны использовать другой класс.

Очевидным выбором будут классы BouncyCastle, либо X509CertificateStructure, либо X509CertificateHolder, в зависимости от используемой версии BouncyCastle (более старая версия BouncyCastle включена в iTextSharp,более новые могут быть получены с их веб-сайта). Эти классы выставляют SubjectPublicKeyInfo.

...