Используя этот код для получения байтов открытого ключа...
var pubKey =
AppDomain.CurrentDomain.DomainManager.EntryAssembly
.GetName().GetPublicKey();
Что это за общая структура в начале (первые 32 байта) ключа? Это не ASN.1, и он не может быть переменным. Я могу погуглить и получить повторы.
// 00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 00 24 00 00 52 53 41 31
Это все наоборот или только часть (например, модуль в конце)? 52 53 41 31
— это строка RSA1
. Модуль моего ключа составляет 1024 бита, поэтому я искал что-то, описывающее длину. 0x0400
(00 04
BE) будет 1024 (бит), 0x80
будет 128 (байт, 1024/8).
// 00 04 00 00 01 00 01 00
Являются ли последние от 4 до 6 публичным показателем? Большой или маленький порядок байтов? Является ли последний нуль терминатором или разделителем?
Исследования реализации (.NET и Mono) RSAPKCS1SignatureFormatter
и RSAPKCS1SignatureDeformatter
идут непросто.
Удаленные правки, ответ на собственный вопрос... если кто-то не предложит лучший ответ или не добавит деталей, включая почему.