首先,我仅出于学术目的编写了以下代码。我之所以这样说,是因为我没有将其放在生产环境中,因此“绕过”了我本来需要做的一些开销,我只需要能够使用以下命令对字符串进行加密/解密即可下面的代码。我能够做几次,但是由于某种原因,我开始收到“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);
}
}
它只会在RSADecrypt调用上引发此异常。
有任何想法吗?我在某处读到它可能与传递给RSA.Decrypt的cryptodata的预期大小有关。
谢谢
}
最佳答案
Encoding.Unicode
)来回转换明文。 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);
}
}
关于c# - "Bad Data"CryptographicException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9659898/