Прежде всего, мне нужно повторить функциональность echo -n "someUnhashedData" | openssl pkeyutl -sign -inkey rsa.key | base64 -w 0
в коде C #. Мне удалось загрузить закрытый ключ в System.Security.Cryptography.RSACryptoServiceProvider
и вызвать SignData
, но результат, который я получаю, отличается от результата openssl pkeyutl
.
Насколько я понимаю, в этот пост и этот RFC при вызове pkeyutl -sign
без -pkeyopt digest:hashFunc
openssl не связывает данные с идентификатором функции дайджеста и пропускает ASN. 1 кодировка Это означает, что необработанные данные дополняются и шифруются. Этот инструмент , кажется, подтверждает, что расшифрованная подпись выглядит как данные в виде открытого текста.
Так как мне это сделать с C #? Все функции из RSACryptoServiceProvider
требуют указания алгоритма хеширования и кодирования подписи перед шифрованием. Я что-то упускаю или мне придется написать собственное частное шифрование RSA?