在编写代码过程中,总少不了加密解密,尤其是比较重要的数据需要多个端传递数据的时候,经过本人测试,在js、php、c++直接可以互相传递密文的方法就是aes,在php和js直接传递密文可能会出现解密失败的情况,需要调整 密钥值和偏移量值
PHP版代码,默认base64输出
// ssl加密
function AES($data, $method = 'aes-128-cbc')
{
// 公钥明文
// $data = "特殊他";
$data['time'] = time();
$data = json_encode($data);
// 偏移量
$iv = 'GiiuC6iH!P#NRf1@';
// 密钥
$key = '*TIGGtg6VuYf!48@';
// 加密
$e = openssl_encrypt($data, $method, $key, 0, $iv);
$data = [];
// 对密文进行处理,兼容js解密
$data['Ciphertext'] = $e;
$data['Key'] = $key;
// 明文
$data['Cleartext'] = openssl_decrypt($e, $method, $key, 0, $iv);
// 偏移量进行64对称加密
$data['iv'] = $iv;
return $data;
}
PHP加密解密为十六进制
public function AES($data, $type = 'encode', $method = 'aes-128-cbc')
{
// 偏移量
$iv = 'Vdvr8viCcsDIprub';
// 密钥
$key = '9uPA2JVrL9AjZFz2';
if($type == 'encode') {
// 加密
$data = bin2hex(base64_decode(openssl_encrypt($data, $method, $key, 0, $iv)));
} else {
// 解密
$data = openssl_decrypt(base64_encode(hex2bin($data)), $method, $key, 0, $iv);
}
return $data;
}
这里需要注意的是 偏移量和密钥的长度必须是16位以上的值,密码生成可以通过 随机密码生成器 生成
对密文的加密解密可以通过 在线AES加密解密 进行测试
效果如下: