AES解密失敗:初始化向量IV缺失導致Parameters missing異常如何解決?

AES解密失敗:初始化向量IV缺失導致Parameters missing異常如何解決?

AES解密失敗:初始化向量IV缺失引發(fā)的Parameters missing異常及解決方案

AES加密解密過程中,正確使用初始化向量(IV)至關(guān)重要。本文分析一個AES解密失敗案例,并提供有效解決方案。

問題描述:

一段AES加密解密代碼在解密階段報錯,顯示Java.security.InvalidKeyException: Parameters missing。代碼使用AES/CBC/PKCS5Padding模式,加密時隨機生成IV并與密文拼接,解密時嘗試從拼接數(shù)據(jù)中提取IV再解密。然而,解密拋出Parameters missing異常。

代碼片段(有問題的部分):

解密部分:

// ... 其他代碼 ... byte[] removeBytes = Arrays.copyOf(decryptStr, decryptStr.length - 16); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES")); // 此處錯誤 byte[] byteData = cipher.doFinal(removeBytes); // ... 其他代碼 ...

錯誤原因分析:

問題在于解密時cipher.init方法的調(diào)用。AES/CBC/PKCS5Padding模式需要提供IV。代碼雖然提取了IV,但cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, “AES”))只設(shè)置了密鑰,缺少IV參數(shù),導致Parameters missing異常。

解決方案:

正確調(diào)用cipher.init方法應(yīng)包含密鑰和IV參數(shù):

IvParameterSpec ivParameterSpec = new IvParameterSpec(Arrays.copyOfRange(decryptStr, decryptStr.length - 16, decryptStr.length)); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"), ivParameterSpec);

修改后的代碼使用Arrays.copyOfRange方法正確提取IV進行解密初始化,避免Parameters missing異常。 關(guān)鍵在于解密時不能使用加密密鑰作為IV,而必須使用加密時生成的IV。

通過以上修改,可以解決AES解密中因IV缺失導致的Parameters missing異常。 確保在加密和解密過程中始終正確處理和傳遞IV,才能保證AES加密解密的正常運行。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊8 分享