安全传递数据js前段加密,php后端解密

2020-07-20  阅读 88 次

现在很多网站为了安全提交表单数据时都是加密的,用js前段加密php后端解密,也就是JS使用AES/CBC与PHP进行通讯,实现方法可以参考下,首先前端引入aes.js加密文件(下载地址在下面),使用方法如下:

<script src="/js/aes.js"></script>
<script>
//AES-128-CBC加密模式,key需要为16位,key和iv可以一样
//定义密钥
var key = CryptoJS.enc.Utf8.parse('dvyYRQlnPRCMdQSe');
//定义IV偏移
var iv = CryptoJS.enc.Utf8.parse('face0123456789ai');
//加密
function encrypt(data) {
	return CryptoJS.AES.encrypt(data, key, {iv: iv, mode: CryptoJS.mode.CBC}).toString();
}
//解密
function decrypt(data) {
	return CryptoJS.AES.decrypt(data, key, {iv: iv}).toString(CryptoJS.enc.Utf8);
}
var encrypted = encrypt('你好世界,雅爱笔记!');//加密
console.log(encrypted);
var decrypted = decrypt(encrypted);//加密
console.log(decrypted);
</script>

PHP后端类代码Aes.class.php

<?php
/**
* AES加密类库
* Class AesUtil
*/
class AesUtil
{
/**
* AES/CBC 加密
* @param $data
* @param $encryptKey
* @param $localIV
* @return string
*/
public static function encrypt($data, $encryptKey, $localIV)
{
if (PHP_VERSION >= 7.1) {
//php7.1新版本加密
return base64_encode(openssl_encrypt($data, 'aes-128-cbc', $encryptKey, OPENSSL_RAW_DATA, $localIV));
} else {
//php7.1以下版本加密
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
mcrypt_generic_init($module, $encryptKey, $localIV);
$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $block - (strlen($data) % $block);
$data .= str_repeat(chr($pad), $pad);
$encrypted = mcrypt_generic($module, $data);
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
return base64_encode($encrypted);
}
}

/**
* AES/CBC 解密
* @param $data
* @param $encryptKey
* @param $localIV
* @return bool|string
*/
public static function decrypt($data, $encryptKey, $localIV)
{
if (PHP_VERSION >= 7.1) {
//php7.1新版本解密
return openssl_decrypt(base64_decode($data), 'aes-128-cbc', $encryptKey, 1, $localIV);
} else {
//php7.1以下版本解密
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
mcrypt_generic_init($module, $encryptKey, $localIV);
$data = mdecrypt_generic($module, base64_decode($data));
$data = str_replace("", "", $data);
return $data;
}
}
}
?>

然后下面是示例代码

require 'Aes.class.php';
$tuixiao = new AesUtil();
//加密,结果:7+KUbKx2o0oYTG0BKd35eLUccBf6jHhoCNWy/PwgBtw=
echo $encrypt = $tuixiao->encrypt('你好世界,雅爱笔记!', "dvyYRQlnPRCMdQSe", "face0123456789ai");
//解密,结果:你好世界,雅爱笔记!
echo $tuixiao->decrypt($encrypt, "dvyYRQlnPRCMdQSe", "face0123456789ai");


本文地址:https://www.5devip.com/post/160.html
版权声明:本文为原创文章,版权归 本站 所有,欢迎分享本文,转载请保留出处!

评论已关闭!