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 相关文章推荐
JavaScript 学习笔记(六)
Dec 31 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
jquery统计输入文字的个数并对其进行判断
Jan 07 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
Jun 09 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
Nov 09 Javascript
JavaScript插件Tab选项卡效果
Nov 14 Javascript
Angular4学习教程之DOM属性绑定详解
Jan 04 Javascript
axios对请求各种异常情况处理的封装方法
Sep 25 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
Dec 10 Javascript
vue 中几种传值方法(3种)
Nov 12 Javascript
JS实现音乐导航特效
Jan 06 Javascript
vue实现简易计算器功能
Jan 20 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
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
php如何连接sql server
2015/10/16 PHP
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
JS与C#编码解码
2013/12/03 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
浅析javascript的return语句
2015/12/15 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
python中的插值 scipy-interp的实现代码
2018/07/23 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
python用700行代码实现http客户端
2021/01/14 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
工商企业管理应届生求职信
2013/11/03 职场文书
2014年端午节活动方案
2014/03/11 职场文书
2014年班干部工作总结
2014/11/25 职场文书
教师学习心得体会范文
2016/01/21 职场文书
简历自我评价范文
2019/04/24 职场文书
2019教师的学习计划
2019/06/25 职场文书
MySQL数据库查询之多表查询总结
2022/08/05 MySQL