后台为php,使用
openssl
用
aes
进行加密,加密结果与
http://tool.chacuo.net/cryptaes
结果是一致的。
现在的问题是前端使用
CryptoJS
怎么弄都不一样。要么与后台加密的数据不一致,要么
CryptoJS
加的密不能用
CryptoJS
来解密。
问题出在哪里呢,如果大家有更好的方案麻烦一并写出。太苦恼了。
php代码:
$data = '1000001';
$key = 'ABC123';
$iv = '1111111111111111';
// 结果是:2oXkUjqbc1JnSpWEemVfzg==
// 结果和http://tool.chacuo.net/cryptaes一致
$encrypt_string = openssl_encrypt($data, 'AES-128-CBC', $key, 1, $iv);
js代码,前提引入了CryptoJS:
//十六位十六进制数作为秘钥
var aeskey = CryptoJS.enc.Utf8.parse("ABC123");
//十六位十六进制数作为秘钥偏移量
var aesiv = CryptoJS.enc.Utf8.parse(1111111111111111);
// 加密
function encrypt(data) {
var srcs = CryptoJS.enc.Utf8.parse(data);
var encrypted = CryptoJS.AES.encrypt(srcs, aeskey, {
iv: aesiv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
//返回base64加密结果
return encrypted.toString();
}
//解密
function decrypt(data) {
// data是base64编码数据
var decrypt = CryptoJS.AES.decrypt(data, aeskey, {
iv: aesiv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decrypt.toString();
return decryptedStr;
}
// 结果是:IkNtZY1m41sEkgIqsuZBoQ==
// 结果相差太大
console.log(encrypt('1000001'));