C# RijndaelManaged无法解密

C# RijndaelManaged无法解密,c#,.net,security,encryption,rijndaelmanaged,C#,.net,Security,Encryption,Rijndaelmanaged,有关代码,请访问: 我的问题是,当我解密时,什么也不会返回。没有任何东西会被解密 111-114号线附近的某个地方出了问题。即使我将数据放入memorystream msDecrypt,加密流CSDERypt也是空的 编辑 Nudier提出了一个解决方案记住要设置加密和解密的密钥,还要设置初始化向量考虑将您的示例缩小4倍-删除所有字符串转换代码,只使用字节数组。否则发布到codereview站点。你在哪里设置加密密钥和初始化向量?我已经上传了更多的代码-谢谢Alexei Levenkov,好主意

有关代码,请访问:

我的问题是,当我解密时,什么也不会返回。没有任何东西会被解密

111-114号线附近的某个地方出了问题。即使我将数据放入memorystream msDecrypt,加密流CSDERypt也是空的

编辑
Nudier提出了一个解决方案

记住要设置加密和解密的密钥,还要设置初始化向量

考虑将您的示例缩小4倍-删除所有字符串转换代码,只使用字节数组。否则发布到codereview站点。你在哪里设置加密密钥和初始化向量?我已经上传了更多的代码-谢谢Alexei Levenkov,好主意。创建新的rijndaelmanaged对象时默认会生成密钥谢谢你nudier,它正在工作。我已重构代码以适合我的类:。RMCrypto.GenerateKey;和RMCrypto.GenerateIV;没有必要。我真的不知道我以前的代码和现在的代码有什么不同,但它是有效的。感谢you@CasperThuleHansen您的变体使用urlsavencode@DmitrijPolyanin拯救我太棒了!
     public AesData GetAesData()
    {

        //Before assigned the key and IV you have to generate it first this way.

        _rijndaelObj.GenerateKey();

        _rijndaelObj.GenerateIV();


        string key = Encoding.ASCII.GetString(_rijndaelObj.Key);
        string iv = Encoding.ASCII.GetString(_rijndaelObj.IV);
        return new AesData(key, iv);
    }
//Function for encrypting propose
static string SymmetricEncryption(string str, byte[] key, byte[] IV)
{

MemoryStream ms = new MemoryStream();

try
{

//---creates a new instance of the RijndaelManaged class---
RijndaelManaged RMCrypto = new RijndaelManaged();

//---creates a new instance of the CryptoStream class---
CryptoStream cryptStream =new CryptoStream(ms, RMCrypto.CreateEncryptor(key, IV),

CryptoStreamMode.Write);

StreamWriter sWriter = new StreamWriter(cryptStream);

//---encrypting the string---
sWriter.Write(str);

sWriter.Close();

cryptStream.Close();

//---return the encrypted data as a string---
return System.Convert.ToBase64String(ms.ToArray());

}
catch (Exception ex)

{
Console.WriteLine(ex.ToString());

return (String.Empty);
}

}


//Function for Decrypting propose
static string SymmetricDecryption(string str, byte[] key, byte[] IV)
{

try

{

//---converts the encrypted string into a byte array---
byte[] b = System.Convert.FromBase64String(str);

//---converts the byte array into a memory stream for decryption---
MemoryStream ms = new MemoryStream(b);

//---creates a new instance of the RijndaelManaged class---
RijndaelManaged RMCrypto = new RijndaelManaged();

//---creates a new instance of the CryptoStream class---
CryptoStream cryptStream = new CryptoStream(ms, RMCrypto.CreateDecryptor(key, IV),

CryptoStreamMode.Read);

//---decrypting the stream---
StreamReader sReader = new StreamReader(cryptStream);

//---converts the decrypted stream into a string---
String s = sReader.ReadToEnd();

sReader.Close();

return s;

}
catch (Exception ex)
{

Console.WriteLine(ex.ToString());

return String.Empty;

}

}



//Main function execute the functions
RijndaelManaged RMCrypto = new RijndaelManaged();

//---generate key---
RMCrypto.GenerateKey();

byte[] key = RMCrypto.Key;

Console.WriteLine(“Key : “ + System.Convert.ToBase64String(key));

//---generate IV---
RMCrypto.GenerateIV();

byte[] IV = RMCrypto.IV;
Console.WriteLine(“IV : “ + System.Convert.ToBase64String(IV));

//---encrypt the string---
string cipherText = SymmetricEncryption(“This is a test string.”, key, IV);

Console.WriteLine(“Ciphertext: “ + cipherText);

//---decrypt the string---
Console.WriteLine(“Original string: “ + SymmetricDecryption(cipherText, key, IV));