本文中的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.js文件百度云分享地址:
链接:https://pan.baidu.com/s/1zyvYFgV4bDmwjqKQJHw4qA
提取码:lnz0
推荐博文:
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论