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 相关文章推荐
删除重复数据的算法
Nov 23 Javascript
JavaScript 判断指定字符串是否为有效数字
May 11 Javascript
js纯数字逐一停止显示效果的实现代码
Mar 16 Javascript
AngularJS ng-bind-template 指令详解
Jul 30 Javascript
利用fecha进行JS日期处理
Nov 21 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
Mar 09 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
js实现列表向上无限滚动
Jan 13 Javascript
VUE中使用HTTP库Axios方法详解
Feb 05 Javascript
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
jQuery实现动态向上滚动
Dec 21 jQuery
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
关于尾递归的使用详解
2013/05/02 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
python相对企业语言优势在哪
2020/06/12 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
IRO美国官网:法国服装品牌
2018/03/06 全球购物
日本小田急百货官网:Odakyu
2018/07/19 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
优秀班集体获奖感言
2014/02/03 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
授权委托书协议书
2014/10/16 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
2015年大学生实习评语
2015/03/25 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python