Java 密码:抛出IllegalBlockSizeException
我正在尝试解密Java中的数据,该数据是使用AES-256-CBC在PHP中加密的。JavaJava 密码:抛出IllegalBlockSizeException,java,android,encryption,Java,Android,Encryption,我正在尝试解密Java中的数据,该数据是使用AES-256-CBC在PHP中加密的。Javacipher.doFinal抛出IllegalBlockSizeException的解密方法。有人能帮我解决这个问题吗?在过去的两天里我一直在努力解决这个问题。如果需要更多信息,请告诉我 public static String decrypt(String encryptedResult, String secretKey, String iv) { String decryp
cipher.doFinal
抛出IllegalBlockSizeException的解密方法。有人能帮我解决这个问题吗?在过去的两天里我一直在努力解决这个问题。如果需要更多信息,请告诉我
public static String decrypt(String encryptedResult, String secretKey, String iv) {
String decrypted;
try {
byte[] bytes = new BigInteger(encryptedResult.trim(),16).toByteArray();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, makeKey(secretKey), makeIv(iv));
byte[] bytesFinal = cipher.doFinal(bytes);
decrypted = new String(bytesFinal);
} catch (Exception e) {
throw new RuntimeException(e);
}
return decrypted;
}
static AlgorithmParameterSpec makeIv(String iv) {
try {
return new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
static Key makeKey(String secretKey) {
return new SecretKeySpec(secretKey.getBytes(), "AES");
}
该错误表明
byte[]bytes
的大小不是AES块大小16的倍数。字节的长度是多少?@EbbeM.Pedersen字节的长度是33不要修剪输入,你是怎么做到的?不要使用BigInteger来解码你的十六进制字符串。。在您的示例中,它用0作为数据的前缀,从而将数据增加到33个字节,使其成为无效的加密块。根据发布的16
基数和字符串cae0…2bde
,加密数据似乎是十六进制编码的。因此,十六进制解码可能比Base64解码更有用,例如,byte[]bytes=hextStringToByteArray(encryptedResult)代码>其中hexStringToByteArray
来自。