как прочитать открытый ключ RSA из файла pem или xml-файла


У меня есть простая вещь: я хочу зашифровать данные с помощью алгоритма AES и ключа, содержащегося в файле pem, как показано на странице: http://msdn.microsoft.com/en-us/library/sb7w85t6.aspx

В этом примере новый ключ шифрования создается при каждом запуске функции. Но мне нужно прочитать этот ключ из файла pem или xml-файла, но я не могу найти способ сделать это.

Есть ли простой способ прочитать ключ из файла pem и преобразовать его в массив байтов (байт [])?

Я использую C# - .net Framework 3.5, и ключ в файле-это открытый ключ RSA нашего партнера.

1 2

1 ответ:

В каком XML-файле находится ключ RSA?

.Net RSACryptoServiceProvider класс может считывать открытые ключи из XML с помощью FromXmlString метод в следующем формате:

<RSAKeyValue>
    <Modulus>3EgNS5XumwoQYU4uvr2OTtlZ4YJWUcGqTAVLQPtzejB7JSiETGdveuH7jGRFi2lNqruRL+SGpr6KJvvijG7wOQheIsJC48lDnS692pZH3rDcWgGuqjwssFKhJ5GSu3Tetrf4DOKVOeTaG5cU0pATV6aDU0Npy0a+5vkU5e3+5jE=</Modulus>
    <Exponent>AQAB</Exponent>
</RSAKeyValue>

EDIT

Насколько я понимаю вашу процедуру, вы используете открытый ключ RSA в качестве симметричного ключа AES. НЕ ДЕЛАЙ ЭТОГО!Это добавляет иллюзию безопасности, не делая ничего для защиты ваших данных. В качестве аналогии, это все равно, что отправить сейф вместе с его ключом, но положить ключ сначала в розовой коробке. Если вы сделаете это таким образом, любой, кто получит открытый ключ RSA , сможет расшифровать ваши данные; закрытый ключ RSA вообще не будет использоваться. Если третья сторона вынуждает вас сделать это таким образом, покажите им этот ответ или спросите любого полу-приличного криптографа.

НЕ ПОЗВОЛЯЙТЕ ИМ ДЕЛАТЬ ЭТО ТАКИМ ОБРАЗОМ


То, что вы должны делать, - это создавать случайный ключ AES, шифровать его с помощью открытого ключа RSA, а затем отправлять зашифрованный ключ вместе с зашифрованными данными. Таким образом, данные будут читаться только теми, у кого есть закрытый ключ RSA, поскольку никто другой не сможет расшифровать симметричный ключ AES.