本文中的php版本:PHP 7.4.28
前言
有时候,前端和后端(比如说 后端是PHP)进行数据交互的时候,为了安全性 前端需要把一些数据进行加密后 传输给后端,而后端拿到数据后 需要进行解密 才可以用。如果后端解密失败 则后端可以认为 前端或者客户端本次请求传输过来的数据 是恶意或者伪造的请求。后端就可以直接返回错误之类的提示 不进行下面的业务处理。
这种可以解密出来的数据 称之为 对称加密(咳咳 大概 可以这么粗略的认为)
本文中示例的代码 使用的加密算法为:AES加密算法
php加密-解密
php主要使用 openssl 扩展 提供的 openssl_encrypt()函数 及 openssl_decrypt()函数。
<?php $data = 'abcQAQ7小周'; //要加密的数据 $key = "1234567898882222"; //加密秘钥 这个key的字符位数要求:4的倍数 $iv = '8NONwyJtHesysWpM'; //向量(偏移向量) //加密 $encode = base64_encode(openssl_encrypt($data, "AES-128-CBC", $key, true, $iv)); echo $encode."\n"; //输出:Iesl622FoQue3FxVS85iJw== //解密 $decode = openssl_decrypt(base64_decode($encode), "AES-128-CBC", $key, true, $iv); echo $decode; //输出:abcQAQ7小周
注意:
①、openssl_encrypt()函数中的第二个参数 指的是 使用那种加密算法 可以使用 print_r(openssl_get_cipher_methods()); 代码来获取支持的加密算法。
②、openssl_encrypt()函数中的第二个参数 如果使用的是 DES-CBC 加密算法的话 则 第五个参数不用填写(即 iv参数无需填写)。
js加密-解密
js端 使用封装的 CryptoJS 加密算法库。
<script src="CryptoJS.min.js"></script>
<script>
    /*加密*/
    var pwd = CryptoJS.enc.Utf8.parse("abcQAQ7小周"); //加密的明文(要加密的数据)
    var key = CryptoJS.enc.Utf8.parse("1234567898882222"); //加密的 秘钥  这个key的字符位数要求:4的倍数(包含"")
    var iv  = CryptoJS.enc.Utf8.parse("8NONwyJtHesysWpM"); //偏移向量, CBC模式下用到, ECB模式不用
    var encode = CryptoJS.AES.encrypt(pwd, key, {
        mode: CryptoJS.mode.CBC,  // 加密模式
        padding: CryptoJS.pad.Pkcs7,  // 填充方式
        iv: iv  // 偏移向量
    }).toString();
    console.log(encode); //输出:Iesl622FoQue3FxVS85iJw==, base64的形式
    /*解密*/
    
    //必须为base64格式才能解密,如果为16进制 需要先转为base64
    
    var key = CryptoJS.enc.Utf8.parse("1234567898882222"); // 解析秘钥
    var iv  = CryptoJS.enc.Utf8.parse("8NONwyJtHesysWpM"); // 解析偏移向量, CBC模式下用到, ECB模式不用
    var decode = CryptoJS.AES.decrypt("Iesl622FoQue3FxVS85iJw==", key, {
        mode: CryptoJS.mode.CBC,  // 加密模式
        padding: CryptoJS.pad.Pkcs7,  // 填充方式
        iv: iv  // 偏移向量
    }).toString(CryptoJS.enc.Utf8);
    console.log(decode); //输出:abcQAQ7小周
</script>注意:
①、CryptoJS.min.js文件 我会在文件底部提供下载链接。
②、CryptoJS 加密算法库 内置了很多种加密算法 这里只列举使用了AES加密算法,更多使用方式可以查询官方文档或者其它更多使用的相关资(姿)料(势)。
③、现在前端基本都是基于各种框架形式 很少直接写原生js代码了, 如果是使用 npm install 安装的这个加密库的话 则使用方式如下:
const CryptoJS = require('crypto-js')
 
const hash = CryptoJS.HmacSHA256(sign,  privatekey)
 
const SIGNATURE = CryptoJS.enc.Base64.stringify(hash)尾声
①、CryptoJS.min.js文件直接下载地址: CryptoJS.min.zip
CryptoJS.min.zip
②、CryptoJS.min.js文件百度云分享地址:
链接:https://pan.baidu.com/s/1zyvYFgV4bDmwjqKQJHw4qA
提取码:lnz0
推荐博文:
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
 
						

 
					 
					 
					
精彩评论