復号時に「復号するデータの長さが無効」または「入力が無効で削除できません」というエラーを解決

3344 ワード

1.まず、データベースで暗号化されたフィールドが強制的に切断されたかどうかを排除します.
2、AES暗号化後のbyte[]まずbase 64(Convert.ToBase 64 String)符号化を1回適用し、utf 8をそのまま使用すると上記エラーが報告され、unicode符号化すると暗号化後のbyte配列が他の符号化方式で符号化されているため文字が失われる.
3、base符号化後の文字列を配列利用可能なConvertに復元する.FromBase64String.
暗号化:
public static byte[] AESEncrypt(string plainText)

{

            SymmetricAlgorithm des = Rijndael.Create();

            byte[] inputByteArray = Encoding.UTF8.GetBytes(plainText);            

            des.Key = Encoding.UTF8.GetBytes(keys);

            des.IV = _key1;


ICryptoTransform cTransform
= des.CreateEncryptor(); return cTransform.TransformFinalBlock(inputByteArray, 0, inputByteArray.Length); }

復号化:
public static byte[] AESDecrypt(byte[] cipherText)

{

            SymmetricAlgorithm des = Rijndael.Create();

            des.Key = Encoding.UTF8.GetBytes(keys);

            des.IV = _key1;



            ICryptoTransform cTransform = des.CreateDecryptor();

            return cTransform.TransformFinalBlock(cipherText, 0, cipherText.Length);

}

 
public static byte[] _key1 = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

public static string keys = "dongbinhuiasxiny";// ,128