的代碼,可以發現:http://pastebin.com/3Yg5bHraRijndaelManaged的無法解密
我的問題是,當我解密,然後沒有東西都回來了。沒有得到解密。
它出錯周圍線111-114地方。該CryptoStream的(csDecrypt)是空的沉綿我把數據導入到的MemoryStream(msDecrypt)
編輯 Nudier想出了一個解決方案
的代碼,可以發現:http://pastebin.com/3Yg5bHraRijndaelManaged的無法解密
我的問題是,當我解密,然後沒有東西都回來了。沒有得到解密。
它出錯周圍線111-114地方。該CryptoStream的(csDecrypt)是空的沉綿我把數據導入到的MemoryStream(msDecrypt)
編輯 Nudier想出了一個解決方案
//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));
這到底是什麼呢? – 2012-04-03 00:06:32
謝謝你nudier,它正在工作。 我已經重構代碼,以適應我的課:[鏈接](http://pastebin.com/gugiNNTn)。 RMCrypto.GenerateKey();和RMCrypto.GenerateIV();沒有必要。 我真的不知道在哪裏的區別是在之前我的代碼和代碼了,但它的工作原理。 謝謝 – 2012-04-03 06:17:14
記得設置加密和解密以及DE IV密鑰(初始化向量)
我已經上傳所有的代碼 - 見編輯 – 2012-04-02 19:27:29
檢查這個環節,http://pastebin.com/E5U3v7G4 – 2012-04-02 20:28:27
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);
}
的按鍵默認情況下創建一個新的生成時RijndaelManaged的對象 – 2012-04-02 20:04:39
考慮對你的樣品小4倍 - 刪除所有字符串的轉換代碼,只是有字節數組。否則發佈到codereview網站。 – 2012-04-02 17:32:35
你在哪裏設置加密密鑰和初始化向量? – Steve 2012-04-02 17:40:58
我已經上傳了一些更多的代碼 - 謝謝你阿列克謝Levenkov,好主意 – 2012-04-02 19:27:54