我是PHP的新手,我试图在PHP中实现等效的CryptoJS AES加密。我看到了这个post,但不幸的是,我无法实现同样的目标。我在PHP代码中以加密字符串的形式得到了不同的输出。
我哪里出错了?
Javascript代码
const customerObject = {
CustomerName: "test",
EmailID: "tester@test.com",
Street: "Test",
City: "London",
Country: "United Kingdom",
ZipCode: "XXX XXX",
};
const token = "8056483646328123";
const key = CryptoJS.enc.Utf8.parse(token);
const iv = CryptoJS.enc.Utf8.parse(token);
const returnEncrypted = CryptoJS.AES.encrypt(
CryptoJS.enc.Utf8.parse(customerObject),
key,
{
iv: iv,
keySize: 128 / 8,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
}
);PHP代码
<?php
$customer = [
'CustomerName' => "test",
'EmailID' => "tester@test.com",
'Street' => "Test",
'City' => "London",
'Country' => "United Kingdom",
'ZipCode' => "XXX XXX",
];
$plaintext = json_encode($customer);
$method = 'AES-128-CBC';
$key = hex2bin("8056483646328123");
$iv = hex2bin("8056483646328123");
$ciphertext = openssl_encrypt(
$plaintext,
$method,
$key,
OPENSSL_RAW_DATA,
$iv
);
$ciphertext = base64_encode($ciphertext);
echo $ciphertext;
?>发布于 2022-02-28 14:15:06
正如@Topaco在注释中指出的,不能对键和IV进行十六进制解码,即删除hex2bin()。
修正后的代码如下所示。
<?php
$customer = [
'CustomerName' => "test",
'EmailID' => "tester@test.com",
'Street' => "Test",
'City' => "London",
'Country' => "United Kingdom",
'ZipCode' => "XXX XXX",
];
$plaintext = json_encode($customer);
$method = 'AES-128-CBC';
$key = "8056483646328123";
$iv = "8056483646328123";
$ciphertext = openssl_encrypt(
$plaintext,
$method,
$key,
OPENSSL_RAW_DATA,
$iv
);
$ciphertext = base64_encode($ciphertext);
echo $ciphertext;
?>https://stackoverflow.com/questions/71295004
复制相似问题