gpt4 book ai didi

java - 异常 : wrong final block length. ..aes 解密

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:40 28 4
gpt4 key购买 nike

我想要实现的是 AES CBC 解密 like this in android使用 online tool

我不是真正的 android 开发者,下面的代码不一定是 100% 安全的(只是为了举例)加密工作得很好,但我真的坚持解密:

行:AESCrypt.decrypt(key2, ivBytes, todecode);抛出异常我认为问题出在“key2”和“todecode”变量的实际数据转换上……有人知道我错过了什么吗?

设置:

private static final String TAG = "AESCrypt";

// AESCrypt-ObjC uses CBC and PKCS7Padding
private static final String AES_MODE = "AES/CBC/PKCS7Padding";
private static final String CHARSET = "UTF-8";

// AESCrypt-ObjC uses SHA-256 (and so a 256-bit key)
private static final String HASH_ALGORITHM = "SHA-256";





byte[] key = hexStringToByteArray("E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2");
SecretKeySpec key2 = new SecretKeySpec(key, 0, key.length, "AES");
byte[] ivBytes = hexStringToByteArray("12CEC438810CFA399A81139AF7D648BC");
byte[] todecode = Base64.decode("CD46009A232420B2CBF6E4148EE17AA4",
Base64.NO_WRAP);
try {

resultbytes = AESCrypt.decrypt(key2, ivBytes, todecode);
result = resultbytes.toString();

} catch (Exception e) {

// TODO Auto-generated catch block
feedbackBody.append("catch blok \n");
e.printStackTrace();

}
feedbackBody.append(result + " \n");



public static byte[] decrypt(final SecretKeySpec key, final byte[] iv,
final byte[] decodedCipherText) throws GeneralSecurityException {
final Cipher cipher = Cipher.getInstance(AES_MODE);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);
byte[] decryptedBytes = cipher.doFinal(decodedCipherText);

log("decryptedBytes", decryptedBytes);

return decryptedBytes;
}

编辑:似乎输入数据是这里的错误:

如果我加密原始数据并在之后立即解密,它工作得很好......但我从别处得到解密文件

怀疑字符串编码错误:Base64.decode("CD46009A232420B2CBF6E4148EE17AA4", Base64.NO_WRAP);

最佳答案

请尝试使用以下方法进行AES加密和解密,经过长期测试:

 public static String encrytData(String text) throws Exception {

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
byte[] static_key = Constants.AES_KEY.getBytes();

SecretKeySpec keySpec = new SecretKeySpec(static_key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(Constants.IV_VECTOR);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);

byte[] results = cipher.doFinal(text.getBytes());

String result = Base64.encodeToString(results, Base64.NO_WRAP|Base64.DEFAULT);
return result;

}


public static String decryptData(String text)throws Exception{

byte[] encryted_bytes = Base64.decode(text, Base64.DEFAULT);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
byte[] static_key = Constants.AES_KEY.getBytes();

SecretKeySpec keySpec = new SecretKeySpec(static_key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(Constants.IV_VECTOR);
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);

byte[] decrypted = cipher.doFinal(encryted_bytes);
String result = new String(decrypted);

return result;
}

关于java - 异常 : wrong final block length. ..aes 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796628/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com