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 相关文章推荐
jquery获取input的value问题说明
Aug 19 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
Jun 05 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
Feb 11 Javascript
JavaScript ParseFloat()方法
Dec 18 Javascript
对jQuary选择器的全面总结
Jun 20 Javascript
jQuery实现立体式数字滚动条增加效果
Dec 21 Javascript
Bootstrap源码解读下拉菜单(4)
Dec 23 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
Aug 16 Javascript
实例介绍JavaScript中多种组合继承
Jan 20 Javascript
微信小程序HTTP接口请求封装的实现
Feb 21 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
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
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
网页javascript精华代码集
2007/01/24 Javascript
javascript编程起步(第三课)
2007/02/27 Javascript
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
JS input 数字验证代码
2009/07/30 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
邮政员工辞职信
2014/01/16 职场文书
学校安全教育制度
2014/01/31 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
国际金融专业自荐信
2014/07/05 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书