1.首先必须所有的数据:
rijndaelDecrypt.TransformFinalBlock(inputData,0,inputData.Length);
不能用inputData.Length - 1,如果少个数据肯定长度不对,则出异常。
2.要密码经过解密后得到正确的数据,除了key要一样外,iv也必须一样,但斑竹的是随机产生的,这样解密出来的数据就不对了。
3.用ASCII只支持0-127的字符,超过这个范围就会用63来替代,这样的话,就会丢失大量的数据,再去解密肯定也得不到原来的数据了。
这样改一下即可:
public static void Main(String[] args)
{
String str = EncryptRijndael("aaa","abcdefghijklmnop","abcdefghijklmnop");
Console.WriteLine(str);
Console.WriteLine(DecryptRijndael(str,"abcdefghijklmnop","abcdefghijklmnop"));
}
public static string EncryptRijndael(string input,string key, String iv)
{
RijndaelManaged rijndaelProvider = new RijndaelManaged();
rijndaelProvider.Key = ASCIIEncoding.ASCII.GetBytes(key);
rijndaelProvider.IV = ASCIIEncoding.ASCII.GetBytes(iv);
ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor(); byte[] inputData = Encoding.Unicode.GetBytes(input);
byte[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData,0,inputData.Length);
return Encoding.Unicode.GetString(encryptedData);
}
public static string DecryptRijndael(string input,string key, String iv)
{
RijndaelManaged rijndaelProvider = new RijndaelManaged();
rijndaelProvider.Key = ASCIIEncoding.ASCII.GetBytes(key);
rijndaelProvider.IV = ASCIIEncoding.ASCII.GetBytes(iv);
ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor(); byte[] inputData = Encoding.Unicode.GetBytes(input);
byte[] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData,0,inputData.Length);
return Encoding.Unicode.GetString(decryptedData);
}