Простое шифрование / дешифрование RSA в .NET? - PullRequest
8 голосов
/ 06 июля 2011

Я хотел бы сгенерировать пару ключей и просто напечатать что-то вроде:

Rsa.Decrypt(data, privateKey); 
Rsa.Encrypt(data, publicKey);

Есть ли простой способ сделать это? Я знаю, что есть что-то вроде RsaCryptoServiceProvider, но ему нужен XML для создания правильного объекта. Я хотел бы хранить закрытый / открытый ключ в виде простой строки (не XML), которую я помещу в файл web.config:

<appSettings>
    <add key="MyPublicKey" value"...."/>
    <add key="MyrivateKey" value"...."/>
</appSettings>

А позже я зашифрую web.config, чтобы все было безопасно (IIS с этим справится). Можно ли сделать это таким образом?

1 Ответ

10 голосов
/ 06 июля 2011

Создайте объект RSACryptoServiceProvider с предпочитаемым размером ключей (512/1024/2048 ...):

int keySize = 1024;
m_ServiceProvider = new RSACryptoServiceProvider(keySize);

Или используйте размер по умолчанию:

m_ServiceProvider = new RSACryptoServiceProvider();

Затем используйте ExportParameters, чтобы получить то, что вам нужно, в байтовом массиве, например, чтобы получить часть модуля использования открытого ключа:

byte[] publicModulus = m_ServiceProvider.ExportParameters(true).Modulus;

Я передал истинное значение в ExportParameters, потому что вы хотели получить доступ к параметрам личного ключа.

и тогда вам нужно только преобразовать байтовый массив в строку:

string publicModulusStr = Convert.ToBase64String(modulus);

Позже, когда вы захотите прочитать из web.config и воссоздать объект RSACryptoServiceProvider, создайте объект RSAParameters с текстом, который вы сохранили в файле, а затем передайте RSAParameters конструктору RSACryptoServiceProvider.

И просто примечание: файл web.config, который вы сохраняете, должен быть очень закрытым, поскольку вы храните свои личные ключи внутри.

...