java - 使用硬编码密钥在 Java 中模拟 php openssl_decrypt 函数
问题描述
我需要在 java 中复制功能,而不是改进PHP 代码。
php 7 代码:
openssl_encrypt("123::secret", "aes-256-cbc", "1234567899999999", 0, "0123456789999999");
// VZq5nLyJaAzajWQqMMLgmQ==
openssl_decrypt("VZq5nLyJaAzajWQqMMLgmQ==", "aes-256-cbc", "1234567899999999", 0, "0123456789999999");
// 123::secret
在Java中,我想做同样的事情,这样PHP就可以解密它
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("1234567899999999".getBytes(), "AES"), new IvParameterSpec("0123456789999999".getBytes()));
byte[] res = cipher.doFinal("123::secret".getBytes());
java.util.Base64.getEncoder().encodeToString(res);
// xIwXN6R+X/FMMqfmsYhEQQ==
但是,这个密钥是不同的,PHP 在解密尝试时返回 false。我找到了很多解决方案,但它们围绕生成随机 256 个密钥长度,但在我的情况下 PHP 代码使用的是硬编码的秘密
解决方案
Topaca 的回答是正确的(php 代码不能更改)。要使用提供的参数完全模拟所描述的 PHP 函数,需要使用“\0”更新密码以满足长度要求
推荐阅读
- javascript - 如何在javascript中向strokeStyle画布添加渐变
- javascript - express.js:返回异步 json
- javascript - 无法使用 API 读取未定义的属性“forEach”
- sql - 如何从 SNOWFLAKE 的 SQL 表中的 json 字段中选择某些键/值对
- node.js - 节点 js 中未定义 ERR
- jquery - 添加的表格行最终在表格上方而不是在表格中
- scala - 在Scala中使用函数样式查找与谓词匹配的所有两个集合对
- r - 重塑R中的多列
- kubernetes-helm - Helm 在 llops 中使用模板函数
- tinymce - 如何限制 tinyMCE 中的缩进