解決解密時出現"要解密的數據的長度無效" 或 "填充無效無法被移除" 的錯誤


1、首先排除數據庫中讀取加密后的字段是否被強制截斷。

2、AES加密后的byte[]首先應用base64( Convert.ToBase64String)編碼一次,若直接用utf8的話會報上述錯誤,若用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位        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM