gpt4 book ai didi

java - 从 Java 生成的数据中解密 PHP 中的 AES-128

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:06 25 4
gpt4 key购买 nike

通过使用 Stackoverflow 和其他网站上的许多不同示例,我成功创建了一个工作 Java 类,用于使用 AES-128 加密和解密字符串。我还需要在 PHP 中解密和加密这些相同的字符串,以允许双向通信,但是使用 PHP 的 mcrypt 我得到了困惑和损坏的字符串,这与我想要实现的目标并不接近。

这是 Java 源代码(包含在函数中):

        MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] keyBytes = password.getBytes("UTF-8");
digest.update(keyBytes);
keyBytes = Arrays.copyOf(digest.digest(), 16);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);

cipher.init(Cipher.DECRYPT_MODE, keySpec, ivParameterSpec);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));

return new String(decryptedBytes);

例如,这将使用 key /密码 J@RMZyv7~Dyd 返回 dyHuhcYI3JIQ4BssSyJ3bjE/sQCOH+fWq2EujW579BU=,并且可以使用相同的 key 解密为 Dit bericht is versleteld!

在 PHP 中,我使用的代码少了很多,而且我不确定哪里出了问题。我使用 V1gbTVCCbQK7cknbbir5Gg== 作为解密 key ,它是上面 keyBytes 变量的 Base64 编码版本。

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, base64_decode("V1gbTVCCbQK7cknbbir5Gg=="), base64_decode("vdyHuhcYI3JIQ4BssSyJ3bjE/sQCOH+fWq2EujW579BU="), MCRYPT_MODE_CBC, "0000000000000000");
var_dump($decrypted);

这会产生一些断线,我还不知道如何解决这个问题。我确信我的 PHP 实现有问题,因为我可以在 Java 中成功加密和解密它。

最佳答案

事实证明我使用的 IV 不太正确。在尝试了 this 中发现的问题后回答,我发现使用以下代码我可以成功解密我的消息:

function hexToStr($hex)
{
$string = '';
for ($i = 0; $i < strlen($hex) - 1; $i += 2) {
$string .= chr(hexdec($hex[$i] . $hex[$i + 1]));
}
return $string;
}
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, base64_decode($key), base64_decode($encrypted), MCRYPT_MODE_CBC, hexToStr('00000000000000000000000000000000'));

请注意,IV 现在使用该函数而不是值“0000000000000000”。

关于java - 从 Java 生成的数据中解密 PHP 中的 AES-128,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39856338/

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