欢迎光临
我们一直在努力

前端JS与后端PHP加密解密

网页端(在没有https情况下)给密码之类的加密传输,虽然多此一举,也好过直接监控软件就能看到信息

PHP端

    /**
     * 前台加密(对应JS解密)
     * @param $data
     * @param $key
     * @param $iv
     * @return string
     */
    function js_encrypt($data,$key,$iv){
        $data = openssl_encrypt($data,"AES-128-CBC",$key,true,$iv);
        return base64_encode($data);
    }



    /**
     * 前台解密(对应JS加密)
     * @param $data
     * @param $key
     * @param $iv
     * @return string
     */
    function js_decrypt($data,$key,$iv){
        $data = openssl_decrypt(base64_decode($data),"AES-128-CBC",$key,true,$iv);
        $data = rtrim($data,"\0");
        return json_decode($data,true);
    }




 

后端使用

$str = "要加密的文本信息,如果是对象,请转换成文本";
$key = "52c7f81cd24c9699";//16位加密key
$iv = "42e07d2f7199c35d";//16位偏移量

//加密成密文
$new_str = js_encrypt($str,$key,$iv);
var_dump($new_str);
//解密成原文
$old_str = js_decrypt($new_str,$key,$iv);
var_dump($old_str);


16位偏移量可以用通过时间戳+随机数转16位小写的md5实现

 

前端

/**
* 接口数据加密函数
* @param str string 需加密的json字符串
* @param key string 加密key(16位)
* @param iv string 加密向量(16位)
* @return string 加密密文字符串
*/
function js_encrypt(str, key, iv) {
//密钥16位
key = CryptoJS.enc.Utf8.parse(key);
//加密向量16位
iv = CryptoJS.enc.Utf8.parse(iv);
let encrypted = CryptoJS.AES.encrypt(str, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});

return encrypted.toString();
}

/**
* 接口数据解密函数
* @param str string 已加密密文
* @param key string 加密key(16位)
* @param iv string 加密向量(16位)
* @returns {*|string} 解密之后的json字符串
*/
function js_decrypt(str, key, iv) {

//密钥16位
key = CryptoJS.enc.Utf8.parse(key);
//加密向量16位
iv = CryptoJS.enc.Utf8.parse(iv);
let decrypted = CryptoJS.AES.decrypt(str, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);

return decrypted;
}


前端需要引入类库,基于crypto-js(点击下载)

<!--加密解密类-->
<script src="crypto-js/aes.js" type="text/javascript"></script>

前端使用

let str = "要加密的文本信息,如果是对象,请转换成文本";
let key = "52c7f81cd24c9699";//16位加密key
let iv = "42e07d2f7199c35d";//16位偏移量

//加密成密文
let new_str = js_encrypt(str,key,iv);
console.log(new_str);
//解密成原文
let old_str = js_decrypt(new_str,key,iv);
console.log(old_str);

 

分享到:更多 ()