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随鼠标焦点移进移出而显示或隐藏的代码
Mar 21 Javascript
web页面数据展示新想法(json)
Jun 08 Javascript
JQuery.Ajax之错误调试帮助信息介绍
Jul 04 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
Dec 08 Javascript
jquery插件uploadify多图上传功能实现代码
Aug 12 Javascript
JS给swf传参数的实现方法
Sep 13 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
Apr 09 Javascript
vue-cli3 热更新配置操作
Sep 18 Javascript
vue实现图书管理系统
Dec 29 Vue.js
微信小程序onShareTimeline()实现分享朋友圈
Jan 07 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
2012/02/04 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
php获取图片信息的方法详解
2015/12/10 PHP
php文件系统处理方法小结
2016/05/23 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
更改Python命令行交互提示符的方法
2015/01/14 Python
python爬虫增加访问量的方法
2019/08/22 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python集合操作方法详解
2020/02/09 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
简历中个人自我评价范文
2013/12/26 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
个人公开承诺书
2014/03/28 职场文书
软件售后服务方案
2014/05/29 职场文书
校庆活动策划方案
2014/06/05 职场文书
2015年父亲节寄语
2015/03/23 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技
OpenFeign实现远程调用
2022/08/14 Java/Android