The*_*boy 9 c# encryption cryptography rsa
首先,我只是为了学术目的而编写了以下代码.我说这个的原因是因为我没有将它放在生产环境中,因此我"绕过"了我需要做的一些开销,我只需要能够使用加密/解密字符串下面的代码.我能够做到这一点,但由于某种原因,我开始收到"CryptographicException Bad Data",我不确定是什么原因导致了这个问题.
private string RSAEncrypt(string value)
{
byte[] encryptedData = Encoding.Unicode.GetBytes(value);
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = _rsaContainerName;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
{
encryptedData = RSA.Encrypt(encryptedData, false);
return Convert.ToBase64String(encryptedData);
}
}
private string RSADecrypt(string value)
{
byte[] encryptedData = Encoding.Unicode.GetBytes(value);
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = _rsaContainerName;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
{
encryptedData = RSA.Decrypt(encryptedData,false);
return Convert.ToBase64String(encryptedData);
}
}
Run Code Online (Sandbox Code Playgroud)
它只是在RSADecrypt调用上抛出此异常.
有任何想法吗?我读到了可能与传递给RSA.Decrypt的encryptedData的预期大小有关的地方.
谢谢 }
Ras*_*ber 17
使用字符串编码(即Encoding.Unicode)来回转换明文.
使用Base-64(即Convert.[To/From]Base64String)来回转换加密数据;
像这样:
private string RSAEncrypt(string value)
{
byte[] plaintext = Encoding.Unicode.GetBytes(value);
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = _rsaContainerName;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
{
byte[] encryptedData = RSA.Encrypt(plaintext, false);
return Convert.ToBase64String(encryptedData);
}
}
private string RSADecrypt(string value)
{
byte[] encryptedData = Convert.FromBase64String(value);
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = _rsaContainerName;
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(2048,cspParams))
{
byte[] decryptedData = RSA.Decrypt(encryptedData,false);
return Encoding.Unicode.GetString(decryptedData);
}
}
Run Code Online (Sandbox Code Playgroud)
http://blogs.msdn.com/b/shawnfa/archive/2005/11/10/491431.aspx
不要通过字符串编码往返密文
人们在使用托管加密类时犯的一个常见错误是,他们尝试使用其中一个编码类将加密操作的结果存储在字符串中.那似乎有道理吗?毕竟,Encoding.ToString()接受一个byte []并将其转换为一个正是他们所寻找的字符串.
...
相反,如果要将密文转换为字符串,请使用Base64编码.
...
每次都有效的代码结果,因为保证base 64编码能够准确地表示任何输入字节序列.
这里有一个很好的,正确的例子:http: //msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael.aspx
| 归档时间: |
|
| 查看次数: |
25219 次 |
| 最近记录: |