Js通过AES加密后PHP用Openssl解密的方法


Posted in Javascript onJuly 12, 2019

前言

最近遇到的几个网站在提交密码时提交的已经是密文,也就是说在网络上传输的密码是密文,这样提升了密码在网络传输中的安全性。

后端语言加解密已经有很成熟的方案了,前端的话Google之前出过一个crypto-js,为浏览器的js提供了加解密方案。今天一起来了解一下基于AES的前后端加解密流程。

Javascript

1、安装npm包 npm install crypto-js

2、加密代码

const CryptoJS = require("crypto-js");
const key = CryptoJS.enc.Latin1.parse('1234567812345678');
const iv = CryptoJS.enc.Latin1.parse('1234567812345678');
const encoded = CryptoJS.AES.encrypt('hahaha', key, {
 iv: iv,
 mode: CryptoJS.mode.CBC,
 adding: CryptoJS.pad.ZeroPadding
}).toString()
console.log('encoded', encoded)

3、解密代码

const key = CryptoJS.enc.Latin1.parse('123456781234567812345678');
const iv = CryptoJS.enc.Latin1.parse('1234567812345678');
const decoded = CryptoJS.AES.decrypt(encoded, key, {
 iv: iv,
 mode: CryptoJS.mode.CBC,
 adding: CryptoJS.pad.ZeroPadding
}).toString(CryptoJS.enc.Utf8)
console.log('decoded', decoded);

4、输出如下

encoded 6bcgYd4f4ZgNOQH/3tqMpg==
decoded hahaha

PHP

直接使用openssl解密即可,代码如下:

$encoded = '6bcgYd4f4ZgNOQH/3tqMpg==';
$key = '123456781234567812345678';
$iv = '1234567812345678';
var_dump(openssl_decrypt($encoded, 'AES-192-CBC', $key, 0,$iv));

输出结果:

string(6) "hahaha"

注意事项

1、AES加密位数跟密钥key有关, 以下是密钥位数和加密对应关系

  • 16 => AES-128
  • 24 => AES-192
  • 32 => AES-256

2、iv是初始化向量. 超过16字节或者不足16字节都会被补足16字节或者截断到16字节。由于AES是块加密,铭文被分割成固定长度的块(一般是16字节长度),所以iv也是16字节。

3、CBC是加密模式

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
document.designMode的功能与使用方法介绍
Nov 22 Javascript
IE8 下的Js错误HTML Parsing Error...
Aug 14 Javascript
深入document.write()与HTML4.01的非成对标签的详解
May 08 Javascript
jquery固定底网站底部菜单效果
Aug 13 Javascript
jQuery实现给页面换肤的方法
May 30 Javascript
Vue.js实例方法之生命周期详解
Jul 03 Javascript
vue修改vue项目运行端口号的方法
Aug 04 Javascript
vue iView 上传组件之手动上传功能
Mar 16 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
Sep 03 Javascript
jQuery实现鼠标移入显示蒙版效果
Jan 11 jQuery
使用vue cli4.x搭建vue项目的过程详解
May 08 Javascript
Vuex实现购物车小功能
Aug 17 Javascript
django js 实现表格动态标序号的实例代码
Jul 12 #Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 #Javascript
微信小程序开发常见问题及解决方案
Jul 11 #Javascript
使用vue for时为什么要key【推荐】
Jul 11 #Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 #Javascript
vue发送websocket请求和http post请求的实例代码
Jul 11 #Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 #Javascript
You might like
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
python 制作本地应用搜索工具
2021/02/27 Python
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
生产车间班组长岗位职责
2014/01/06 职场文书
《木笛》教学反思
2014/03/01 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
北京奥运会口号
2014/06/21 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
教师创先争优承诺书
2015/04/27 职场文书
追讨欠款律师函
2015/05/27 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
python实现MD5进行文件去重的示例代码
2021/07/09 Python
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技
vue 自定义组件添加原生事件
2022/04/21 Vue.js