本文中的php版本:PHP 7.4.28
前言
有时候,前端和后端(比如说 后端是PHP)进行数据交互的时候,为了安全性 前端需要把一些数据进行加密后 传输给后端,而后端拿到数据后 需要进行解密 才可以用。如果后端解密失败 则后端可以认为 前端或者客户端本次请求传输过来的数据 是恶意或者伪造的请求。后端就可以直接返回错误之类的提示 不进行下面的业务处理。
这种可以解密出来的数据 称之为 对称加密(咳咳 大概 可以这么粗略的认为)
本文中示例的代码 使用的加密算法为:AES加密算法
php加密-解密
php主要使用 openssl 扩展 提供的 openssl_encrypt()函数 及 openssl_decrypt()函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?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 加密算法库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <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 安装的这个加密库的话 则使用方式如下:
1 2 3 4 5 | 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
推荐博文:
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论