在.NET中简单的rsa加密/解密?

时间:2011-07-06 07:34:50

标签: c# .net encryption rsa

我想生成一对键,只需键入:

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 个答案:

答案 0 :(得分:10)

使用您的首选密钥大小(512/1024/2048 ...)创建一个RSACryptoServiceProvider对象:

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

或使用默认大小:

m_ServiceProvider = new RSACryptoServiceProvider();

然后使用ExportParameters获取字节数组所需的内容,例如获取公钥使用的Modulus部分:

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

我在ExportParameters中传递了一个真值,因为你想要访问私钥参数。

然后你只需要将字节数组转换为字符串:

string publicModulusStr = Convert.ToBase64String(modulus);

稍后,当您想要从web.config中读取并重新创建RSACryptoServiceProvider对象时,使用存储在文件中的文本创建一个RSAParameters对象,然后将RSAParameters传递给RSACryptoServiceProvider构造函数。

请注意:您保存的web.config文件应该保密,因为您将私钥存储在内部。