我在尝试将一些代码从JAVA“转换”为PHP时遇到了问题。
我已经尝试了很多功能但是对我来说没有什么能够在双方都获得相同的结果。
JAVA CODE
public static String encrypt(String text, String key, String charset) throws Exception {
byte[] keyBytes = Base64.decodeBase64(key);
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] textBytes = text.getBytes(charset);
byte[] bytes = cipher.doFinal(textBytes);
return new String(Base64.encodeBase64(bytes), charset);
}
KEY PARAMETER - >“NWelNxflgZ + rjP0bo2gi2Q ==” TEXT PARAMETER - >“我是一个测试” CHARSET PARAMETER - >“UTF-8” 算法常数 - > AES
结果 - >“13vh3qeuc + kN7NvcKwM6pw ==”
PHP代码
function encryptAES($text, $key)
{
$key = strtohex($key);
$encrypt = openssl_encrypt($text, 'aes128', $key, OPENSSL_RAW_DATA);
if (!$encrypt) {
throw new Exception('AES encryption error');
}
return base64_encode($encrypt);
}
function strtohex($x)
{
$s='';
foreach (str_split($x) as $c) $s.=sprintf("%02X",ord($c));
return($s);
}
KEY PARAMETER - >“NWelNxflgZ + rjP0bo2gi2Q ==” TEXT PARAMETER - >“我是一个测试”
结果 - >“Vs5pwAC7PK0fQUQQ + PMhKw ==”
任何人都可以帮忙解释一下为什么它不能正常运行我的代码?
非常感谢你们。
修复了,问题是strtohex为您提供了放入控制台的密码。
public static function encryptAES($data, $AES_key)
{
$AES_key = base64_decode($AES_key);
$encrypt = openssl_encrypt($data, 'aes128', $AES_key);
if (!$encrypt) {
throw new Exception('AES encryption error');
}
return base64_encode($encrypt);
}
这是结果代码,它只是用base64_decode转换密钥。谢谢大家!