首页 > 编程语言 >前端用crypto-js来进行加密,php使用openssl_encrypt来进行解密

前端用crypto-js来进行加密,php使用openssl_encrypt来进行解密

时间:2023-03-27 19:56:09浏览次数:32  
标签:加密 前端 openssl js 解密 key CryptoJS iv crypto

项目有个需求,需要对前端提交的密码进行加密传输,防止请求被拦截导致密码的泄露。

1、考虑到性能问题,不好太过的占用浏览器资源,我就直接采用了对称加密的方式(aes)来进行处理;

2、首先来看看前端加密的情况,我采用的是crypto-js来进行加密的,附上链接https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js

3、前端加密

复制代码
// 需要加密的数据
let data = '123456';
// 我采用的是16位的key,为了方便我前端就把key转成UTF8
let key = CryptoJS.enc.Utf8.parse('GftZqNEoBVdB2kwx'); 

// iv采用的是16位的,同样为了方便转成UTF8
let iv = CryptoJS.enc.Utf8.parse('3zyJFPEzh5rUeUNi'); 

// 加密方式使用CBC,padding偏移量设置成Pkcs7,以便和后端对应解密
let encryptData = CryptoJS.AES.encrypt(data, key, {
                            mode: CryptoJS.mode.CBC,
                            iv: iv,
                            padding: CryptoJS.pad.Pkcs7
                        });
// 这样加密就完成啦,打印下加密后的数据
console.log(encryptData.toString());
复制代码

4、另附上前端解密

复制代码
// 需要加密的数据
let encryptData = 'gb+0Jn9uhOmw21cDeTQRiQ==';
// 我采用的是16位的key,为了方便我前端就把key转成UTF8
let key = CryptoJS.enc.Utf8.parse('GftZqNEoBVdB2kwx'); 

// iv采用的是16位的,同样为了方便转成UTF8
let iv = CryptoJS.enc.Utf8.parse('3zyJFPEzh5rUeUNi'); 

// 加密方式使用CBC,padding偏移量设置成Pkcs7,以便和后端对应解密
let encryptData = CryptoJS.AES.decrypt(encryptData, key, {
                            mode: CryptoJS.mode.CBC,
                            iv: iv,
                            padding: CryptoJS.pad.Pkcs7
                        });
// 这样解密就完成啦,打印下解密后的数据;记得讲解密会的数据也转成UTF8
console.log(encryptData.toString(CryptoJS.enc.Utf8));
复制代码

5、php服务端解密

复制代码
function aesDecrypt($data) {
        // 密钥key要和前端一致,由于前端转成了UTF8的格式,这边就可以直接使用了
        $cryptKey = 'GftZqNEoBVdB2kwx';
// iv也是一样要和前端一致
        $iv = '3zyJFPEzh5rUeUNi';
// 然后使用openssl_decrypt来进行解密
        $decrypt = openssl_decrypt($data, 'AES-128-CBC', $cryptKey, 0, $iv);
        return $decrypt;
}    
复制代码

6、附上php服务端加密代码

function aesEncrypt($data) {
 $cryptKey = 'GftZqNEoBVdB2kwx';
$iv = '3zyJFPEzh5rUeUNi';
$encrypt = openssl_encrypt($data, 'AES-128-CBC', $cryptKey, 0, $iv);
return $encrypt;  
}

至此完成了,对前端密码的加密传输,主要麻烦的地方在于前后端的语言不同,需要找对前后端加密方式的匹配,不然前端加密之后,后端会加密不出来。

标签:加密,前端,openssl,js,解密,key,CryptoJS,iv,crypto
From: https://www.cnblogs.com/wish123/p/17262633.html

相关文章

  • js获取项目根路径
    js获取项目根路径 当js作为文件引入的时候,${pageContext.request.contextPath}不可以作为获取项目的根路径,因此只能用js来获取项目的根路径。   //js......
  • JS代码判断手机访问2
    //ifthemodiledevice,redicttothemodilepagevaruserAgentInfo=navigator.userAgent.toLowerCase();varmurl="${pageContext.request.contextPath}/NewFile......
  • JS代码判断手机访问
    利用百度SiteApp的代码判断手机访问自动转到博客手机版页面 <scriptsrc="http://siteapp.baidu.com/static/webappservice/uaredirect.js"type="text/jav......
  • servlet 与 jsp的加载过程
    彻底搞清楚servlet和jsp的加载过程我们在书本上学习到的一般都是说servlet的生命周期,很少有介绍jsp的生命周期,今天我就结合我的感受,为大家说一下关于jsp的生命周期。首先......
  • fastjson 常用方法
    publicstaticfinalObjectparse(Stringtext);//把JSON文本parse为JSONObject或者JSONArraypublicstaticfinalJSONObjectparseObject(Stringtext);//把JSON文......
  • SHA-256 简介及 C# 和 js 实现【加密知多少系列】
    〇、简介SHA-256是SHA-2下细分出的一种算法。截止目前(2023-03)未出现“碰撞”案例,被视为是绝对安全的加密算法之一。SHA-2(安全散列算法2:SecureHashAlgorithm2)是一......
  • QQ登录JS SDK教程,调用openapi接口
    QQ登录将用户信息存储在cookie中,命名为__qc__k,请不要占用__qc__k: 1)::在页面顶部引入JSSDK库:将“js?”后面的appid参数(示例代码中的:100229030)替换成您自己的appid......
  • Aptana支持EXTJS
    Aptana支持EXTJS1.下载安装包含有Eclipse的AptanaStudio;   2.启动Aptana,然后菜单:Help→SoftwareUpdates→FindandInstall…→Searchfornewfeaturest......
  • CSS in JS (JSS)
    JSS是什么简单来说,一句话概括CSSinJS(JSS),就是"行内样式"(inlinestyle)和"行内脚本"(inlinescript)。因为,自从React出现以后,基于组件化的要求,强制把HTML、CSS、JavaScr......
  • JS取出两个数组中的不同或相同元素(简易方法)
    一、使用concat和filter取出不同的元素(取出两个数组的不同元素==>既在arr1又在arr2)vararr1=[0,1,2,3,4,5];vararr2=[0,4,6,1,3,9];functiongetArrDifferenc......