Использование в кодировке Base64 открытого ключа для проверки RSA подписи

В двух словах, это моя проблема:

private string publicKeyString = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVGUzbydMZS+fnkGTsUkDKEyFOGwghR234d5GjPnMIC0RFtXtw2tdcNM8I9Qk+h6fnPHiA7r27iHBfdxTP3oegQJWpbY2RMwSmOs02eQqpKx4QtIjWqkKk2Gmck5cll9GCoI8AUAA5e0D02T0ZgINDmo5yGPhGAAmqYrm8YiupwQIDAQAB";

/* Some transformation required, using publicKeyString to initiate a new RSACryptoServiceProvider object
*/

//for now:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

byte[] selfComputedHash = new byte[]; //left out of the example
byte[] signature = new byte[];

bool result = rsa.VerifyHash(selfComputedHash, CryptoConfig.MapNameToOID("SHA1"), signature);

Как вы можете видеть, проблема заключается в инициировании нового RSACryptoServiceProvider с заданной строкой открытого ключа в кодировке Base64.Мне удалось создать экземпляр с использованием объекта RSAParameters, загруженного байтами [] для модуля и экспоненты, полученными из этого строка открытого ключа с помощью команды оболочки OpenSSL. Но поскольку этот открытый ключ может измениться в будущем, я хочу иметь возможность хранить его в исходной форме в базе данных. Должен быть более простой способ справиться с этим.

Во многих примерах, которые я читал до сих пор, эта проблема избегается за счет экспорта и импорта сгенерированных закрытых и открытых ключей в объект-контейнер ключей и из него и использования их в одном и том же фрагменте кода и, следовательно, без «передачи». ng' ключ в какой-то строковой форме из памяти. Некоторые люди выражали ту же проблему, как здесь, на StackOverflow, так и на других сайтах, но я пока не смог найти удовлетворительного ответа.

Приветствуются любые идеи.

Справочная информация: Мой партнер по общению вычисляет 20-байтовый SHA1-хэш из входной строки переменной длины, состоящей из информации, содержащейся в нескольких полях сообщения, закодированного в ASCII. Затем этот хэш подписывается RSA с помощью закрытого ключа моего партнера и отправляется мне вместе с сообщением ASCII.По прибытии я вычисляю хеш SHA1 самостоятельно, используя те же поля из сообщения ASCII, а затем пытаюсь проверить, не были ли эти поля изменены, вызывая VerifyHash.

Ключ предоставляется в 2 формах: обычная и 'noNL'. Версия noNL включена в приведенный выше код, обычная версия такова:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVGUzbydMZS+fnkGTsUkDKEyFO
GwghR234d5GjPnMIC0RFtXtw2tdcNM8I9Qk+h6fnPHiA7r27iHBfdxTP3oegQJWp
bY2RMwSmOs02eQqpKx4QtIjWqkKk2Gmck5cll9GCoI8AUAA5e0D02T0ZgINDmo5y
GPhGAAmqYrm8YiupwQIDAQAB
-----END PUBLIC KEY-----
17
задан abatishchev 5 January 2018 в 07:37
поделиться