gpt4 book ai didi

java - Android AES 无填充解密,字符串末尾有未知字符 'NUL'

转载 作者:行者123 更新时间:2023-12-01 22:50:54 25 4
gpt4 key购买 nike

我使用以下代码来解密 Java 中的文件,这些文件是通过 PHP mcrypt 函数加密的。

private String iv = "MYKEYHERE";//Dummy iv (CHANGE IT!)
private String SecretKey = "MYKEYHERE";//Dummy secretKey (CHANGE IT!)

private byte[] decrypt(String code)
{
byte[] decrypted = null;
try {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
SecretKeySpec keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES");
if(code == null || code.length() == 0)
throw new Exception("Empty string");

cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);

decrypted = cipher.doFinal(hexToBytes(code));
} catch (Exception e) {
e.printStackTrace();
}
return decrypted;
}

private static byte[] hexToBytes(String str) {
if (str==null) {
return null;
} else if (str.length() < 2) {
return null;
} else {
int len = str.length() / 2;
byte[] buffer = new byte[len];
for (int i=0; i<len; i++) {
try {
buffer[i] = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return buffer;
}
}

我正在从 SDCARD 读取和写入文件

String encyptedData = readFileFromSDCard(params[0]);

byte[] decryptedByteArray = decrypt(encyptedData);

File rootFile = new File(Constants.folioTempLocation+params[1]);
rootFile.mkdirs();

File outFile = new File(rootFile, new File(params[0]).getName());
FileOutputStream out = new FileOutputStream(outFile);
//IOUtils.write(decryptedByteArray, out);
out.write(decryptedByteArray);
out.flush();
out.close();

解密和将文件写回SD_CARD没有问题。但我每个文件末尾都出现未知字符,这限制了整个解密文件的正常工作。

我附上了连接到字符串末尾的未知字符的屏幕截图。我还附上了 encrypted_html_file任何想要使用此文件测试代码的人。

截图 sample image

最佳答案

CBC 是一种 block 模式,必须与适当的填充方案一起使用。

PHP 的 mcrypt使用zero padding - 它将 \0 字符附加到输入数据,使其长度为 block 大小的倍数。显然,解密时你会得到这些零字节。

mycrypt 页面在用户评论中提供了如何实现正确的 PKCS#7 填充方案的示例。其中mcrypt padding问题How to add/remove PKCS7 padding from an AES encrypted string?提供了类似的示例。

关于java - Android AES 无填充解密,字符串末尾有未知字符 'NUL',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24749303/

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