Есть ли способ загрузить ключи в виде строки? Как загрузить ключ в RSACryptoServiceProvider?
От другого вопроса Crypto ++, How to load Base64 RSA keys in Crypto++, похоже, у вас есть только государственные и частные ключи, потому что вы использовали DEREncode
и BERDecode
. То есть у вас есть параметры RSA, а не информация о публичном ключе и информация о закрытом ключе. Ваши ключи не имеют идентификаторов OID и номеров версий. Все в порядке.
От Cryptographic Interoperability: Keys от проекта кода вам понадобится класс C#, который анализирует ASN.1/DER после того, как вы его декодируете Base64. Статья CodeProject предоставляет класс C# с именем AsnKeyParser
для чтения ASN.1/DER и возвращает RSAParameters
для загрузки в CSP.
Код для класса AsnKeyParser
составляет около 800 строк, и есть пять других поддерживающих файлов, чтобы все это происходило, поэтому его не очень удобно размещать здесь. Вы должны скачать его сами. Интересующий файл называется CSInteropKeys.zip
.
Как только вы подключаетесь к классу AsnKeyParser
, для открытого ключа RSA это будет так же просто, как указано ниже. Закрытый ключ будет аналогичным, и код будет указан на сайте CodeProject.
// Your ASN.1/DER parser class
AsnKeyParser keyParser = new AsnKeyParser("rsa-public.der");
RSAParameters publicKey = keyParser.ParseRSAPublicKey();
// .Net class
CspParameters csp = new CspParameters;
csp.KeyContainerName = "RSA Test (OK to Delete)";
csp.ProviderType = PROV_RSA_FULL; // 1
csp.KeyNumber = AT_KEYEXCHANGE; // 1
// .Net class
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
rsa.PersistKeyInCsp = false;
rsa.ImportParameters(publicKey);
Ссылка на файлы на другом сайте неодобрительно, но я не знаю, как предоставить информацию в противном случае. В ответе есть слишком много исходного кода.
Для полноты .Net делает не делают Interop легко. Они не принимают ASN.1/DER или PEM. Скорее, .Net принимает XML-представление ключей. Я считаю, вы можете найти его в RFC 3275, XML-Signature Syntax and Processing. Microsoft does not state that for you. Я как-то собрал его, когда написал статью Code Project.
Может быть, мы должны добавить класс в Crypto ++ для сглаживания XML в дополнение к ASN.1/DER и PEM.
Что находится внутри строки в кодировке Base64? Ключ DER/PEM ASN.1 или что-то еще? – yaakov
Это DER от Crypto ++ – Kyojin