我試圖讓解密邏輯和knnow是加密的字符串鍵和鹽值已經使用由: 重點:8d6ea4d3e6f8c4f8641516baa5e42b85 轉型:AES/CBC/ISO10126PADDING 鹽:1c4dd21d7ba43bdd 迭代:0 加密字符串:JO0blEp + nEl5nNhgUqoZRJNecogM1XHIXUCatPOJycs =解密使用AES 256使用Java
密鑰和鹽中給出的樣品here..The要點是示出了其中我有這種數據的格式。加密方法基於JDK(SunJCE)的默認JCE提供程序。
現在基於上面的信息,我試圖構建解密邏輯。幾個疑問: 1.使用AES-265時,它可以有128位密鑰和64位鹽值嗎?或者我錯誤地解釋了這些信息。 2.看到加密的字符串,它看起來像是Base64編碼的值,我們需要在解密時解碼它。我的理解是否正確? 3.下面是我正在編寫的解密邏輯,當我調用doFinal()函數時,出現錯誤:「javax.crypto.BadPaddingException:給定的最終塊未正確填充」。 。 ,我從過去的三天:(這裏來襲能否請您指出或給我說在這裏用於解密具有infromation確切的代碼:
public static void main(String[] args) throws Exception
{
String encstring = "JO0blEp+nEl5nNhgUqoZRJNecogM1XHIXUCatPOJycs=";
String salt1 = "1c4dd21d7ba43bdd";
String keyStr = "8d6ea4d3e6f8c4f8641516baa5e42b85";
byte[] keyBytes = Hex.decodeHex(keyStr.toCharArray());
SecretKey secret2 = new SecretKeySpec(keyBytes, "AES");
byte[] iv = new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
AlgorithmParameterSpec params = new IvParameterSpec(iv);
Cipher cipher2 = Cipher.getInstance("AES/CBC/ISO10126PADDING", "SunJCE");
cipher2.init(Cipher.DECRYPT_MODE, secret2, params);
byte[] encryptedString = Base64.decodeBase64(encstring.getBytes());
byte[] plaintext1 = cipher2.doFinal(encryptedString);
System.out.println(new String(plaintext));
}
}
你好,按建議我修改了代碼。但仍然沒有運氣。我得到了同樣的錯誤:「javax.crypto.BadPaddingException:鑑於最後的塊沒有正確填充。請你指出是否有任何問題在下面的代碼或任何建議: – user3101544
有太多未知,你需要有在你的解密工作之前,100%是正確的。BadPaddingException只是解密過程中出現問題的一個症狀。除非你能獲得有關加密過程的確切信息,否則解密將不會成功。它是一個密碼或一個真正的密鑰..如果密鑰然後它看起來是128位(不是256位),但爲什麼你有一個鹽,迭代是什麼?另外,運行在CBC模式,你需要知道確切的IV的價值。 –