首页 > 解决方案 > 使用 AES-128-ECB 方法在 Java 中加密并在 PHP 中解密

问题描述

我对 JS 和 PHP 还很陌生,如果我问的内容太基本,我很抱歉。

我正在尝试通过表单中的 POST 方法发送加密数据。我需要加密 JS 中的数据,因为它会在用户需要时动态变化。然后我将在使用 POST 后使用 openssl_decrypt。我试过但没有成功。我做错了什么(我真的不知道我在做什么......)因为 JS 和 PHP 结果不匹配。总结一下,这就是我想要的:

<!DOCTYPE html>
<html>
<body>
<!-- Here I use the crypto package -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
<!-- Here I use the crypto package -->

<?php
define("stringToEncode", "2");
define("KEY", "123456789");
define("COD", "AES-128-ECB");

echo "Encryption result with PHP: ".openssl_encrypt("2", COD, KEY);
?> 
<div>Encryption result with JS: <label id='demo'></label>.</div>

<script>
encryptedAES=CryptoJS.AES.encrypt(<?php echo '"'.stringToEncode.'"' ?>,<?php echo '"'.KEY.'"' ?>);
plainText=encryptedAES.toString();
document.getElementById("demo").innerHTML=plainText;
</script>

</body>
</html>

有人想出点什么吗?提前致谢。

编辑:

从这个问题CryptoJS AES-128-ECB and PHP openssl_encrypt don't match 中获取脚本,我也得到了完全相同的 PHP 和 JS 加密结果。有趣的一点是,它仅在 KEY 有 16 个字母、数字或字母数字字符串(没有 ñ 或 ç 等特殊字符)时才有效。我已经警告过我不是专家,所以我不知道发生了什么。如果有人想找到解释,我在这里留下一个工作示例:

<!DOCTYPE html>
<html>
<body>
<!-- Here I use the crypto package -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
<!-- Here I use the crypto package -->

<?php
define("stringToEncode", "2");
define("COD", "AES-128-ECB");
define("KEY", "429885118246456Y");


echo "Encryption result with PHP: ".openssl_encrypt(stringToEncode, COD, KEY);
?> 

<div>Encryption result with JS: <label id="demo"></label>.</div>
<script>
const key = <?php echo "'".KEY."'" ?>;
let k = CryptoJS.enc.Utf8.parse(key);
encryptedAES = CryptoJS.AES.encrypt(<?php echo "'".stringToEncode."'" ?>, k, {mode: CryptoJS.mode.ECB});
plainText=encryptedAES.toString();
document.getElementById("demo").innerHTML=plainText;
</script>

</body>
</html>

标签: javascriptphpencryptionaescryptojs

解决方案


推荐阅读