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 相关文章推荐
JS是否可以跨文件同时控制多个iframe页面的应用技巧
Dec 16 Javascript
jquery ajax abort()的使用方法
Oct 28 Javascript
javascript仿php的print_r函数输出json数据
Sep 13 Javascript
js控制不同的时间段显示不同的css样式的实例代码
Nov 04 Javascript
通过隐藏iframe实现文件下载的js方法介绍
Feb 26 Javascript
javascript单引号和双引号的区别和处理
May 14 Javascript
JS使用JSON作为参数实例分析
Jun 23 Javascript
详解Angular2 之 结构型指令
Jun 21 Javascript
详解vue mint-ui源码解析之loadmore组件
Oct 11 Javascript
详解如何配置vue-cli3.0的vue.config.js
Aug 23 Javascript
vue项目首屏加载时间优化实战
Apr 23 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 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安全技术之 实现php基本安全
2010/09/04 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
javascript使用activex控件的代码
2011/01/27 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
详细介绍Python中的偏函数
2015/04/27 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
基于树莓派的语音对话机器人
2019/06/17 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
SQL Server笔试题
2012/01/10 面试题
实习教师自我鉴定
2013/12/09 职场文书
八项规定整改措施
2014/02/12 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
简爱电影观后感
2015/06/10 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript