来源:https://blog.csdn.net/morninghapppy/article/details/79044026

案例:https://blog.csdn.net/zhihua_w/article/details/79388297?utm_source=copy

php 案例:https://blog.csdn.net/zhemejinnameyuanxc/article/details/83383434

注意!!!

由于前端的加密库关系,后端加密的“明钥”只能是16位的,但是如果你只是在后端使用或前端只是,没有前后交互,你就当我没说。

前端加密之后,后端解密出来的会有看不见的空白符,php 用trim($data)就可以了。

前端页面:

<!--
|| =========================================================
|| Created by ZHIHUA·WEI.
|| Author: ZHIHUA·WEI <zhihua_wei@foxmail.com>
|| Date: 2018/2/27
|| Time: 10:16
|| Project: 基于PHP和JS的AES相互加密解密方法详解(CryptoJS)
|| Power: index.html
|| =========================================================
--> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="keywords" content="ZHIHUA·WEI,基于PHP和JS的AES相互加密解密方法详解,AES加密解密">
<meta name="description" content="基于PHP和JS的AES相互加密解密方法详解,AES加密解密,PHP开发,ZHIHUA· WEI">
<meta name="author" content="ZHIHUA·WEI">
<meta name="version" content="1.0.0">
<title>基于PHP和JS的AES相互加密解密方法详解(CryptoJS)</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script src="node_modules/crypto-js/crypto-js.js"></script>
</head>
<body>
<div style="margin: 0;text-align:center;">
<h2>基于PHP和JS的AES相互加密解密方法详解(CryptoJS)</h2>
</div>
<div style="margin:0 18%;">
<h4>注意说明:</h4>
<ul>
<li>1. 首先引入CryptoJS包中的aes.js和pad-zeropadding.js</li>
<li>2. 其次引入了jquery.min.js和自己封装的function.js(内容主要是加密解密函数)</li>
<li>3. 加密解密过程中的向量和密钥必须保持一致</li>
<li>4. 进行加密的数据(字符串类型):{"username":"1001","password":"123456","terminal":"PC"}</li>
<li>5. 加密结果是变化的在这不写(变化的原因是因为密钥取得是当前时间)</li>
<li>6. 具体详情可读代码(注释完整)</li>
</ul>
</div> <div style="margin:0 18%;">
<h4>加密测试:</h4>
<ul>
<li>进行加密的数据(字符串类型):{"username":"1001","password":"123456","terminal":"PC"}</li>
<li id="encrypt_key"></li>
<li id="encrypt_string"></li>
</ul>
</div>
<div style="margin:0 18%;">
<h4>解密测试:</h4>
<ul>
<li>
进行解密密的数据(字符串类型、PHP端生成):8bkd/doBOrG3+pTEGkRwk9A3ZLrzXtf10E6Nn9CSoHXRXHydM7xt7PllPhUSItuK8ciF5g6UZ7DruCPQCVNZIJzI4ZHyUMJlV2aHyqMhbEoyS3pK6lPs1MsOeU/H7BZ5
</li>
<li id="decrypt_key">解密的密钥(PHP端生成):</li>
<li id="decrypt_string">JS解密后字符串:</li>
</ul>
</div>
<script> /**
* 接口数据加密函数
* @param str string 需加密的json字符串
* @param key string 加密key(16位)
* @param iv string 加密向量(16位)
* @return string 加密密文字符串
*/
function encrypt(str, key, iv) {
//密钥16位
var key = CryptoJS.enc.Utf8.parse(key);
//加密向量16位
var iv = CryptoJS.enc.Utf8.parse(iv);
var encrypted = CryptoJS.AES.encrypt(str, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
});
return encrypted;
} /**
* 接口数据解密函数
* @param str string 已加密密文
* @param key string 加密key(16位)
* @param iv string 加密向量(16位)
* @returns {*|string} 解密之后的json字符串
*/
function decrypt(str, key, iv) {
//密钥16位
var key = CryptoJS.enc.Utf8.parse(key);
//加密向量16位
var iv = CryptoJS.enc.Utf8.parse(iv);
var decrypted = CryptoJS.AES.decrypt(str, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
});
return CryptoJS.enc.Utf8.stringify(decrypted);
}
</script>
<script>
//********************************加密**********************************
//获取当前时间戳13位 + 3位字符
var timestamp = new Date().getTime().toString() + "WZH";
//加密密钥16位
var encrypt_key = timestamp;
//加密向量16位
var iv = 'ZZWBKJ_ZHIHUAWEI';
//要加密的数据
var encrypt_string = '{"username":"1001","password":"123456","terminal":"PC"}';
//加密后密文(加密函数在function.js文件中)
var encrypted_string = encrypt(encrypt_string, encrypt_key, iv);
$("#encrypt_key").text("JS加密密钥:" + encrypt_key);
$("#encrypt_string").text("JS加密后字符串:" + encrypted_string);
//********************************结束**********************************
//********************************解密**********************************
//解密密钥16位(解密向量同上)
var decrypt_key = '20180227110419WB';
//解密密文字符串
var decrypt_string = "8bkd/doBOrG3+pTEGkRwk9A3ZLrzXtf10E6Nn9CSoHXRXHydM7xt7PllPhUSItuK8ciF5g6UZ7DruCPQCVNZIJzI4ZHyUMJlV2aHyqMhbEoyS3pK6lPs1MsOeU/H7BZ5";
var decrypted_string = decrypt(decrypt_string, decrypt_key, iv);
$("#decrypt_key").text("解密的密钥(PHP端生成):" + decrypt_key);
$("#decrypt_string").text("JS解密后字符串:" + decrypted_string);
//********************************结束**********************************
</script>
</body>
</html>

php:

<?php

header("Content-type:text/html;charset=utf-8");

//加密向量16位
$iv = "ZZWBKJ_ZHIHUAWEI";
//********************************解密**********************************
//js加密秘钥16位
$decrypt_key = "1572329129539WZH";
//js加密密文字符串
$decrypt_data = "SBItvk+il2X+b4A69xJNOIVN78Ty+G2fBfmQvEbtmw2jWWTMJ24lP21vm+mV0qCK13iAgQoiA/g4NCH/8iNZeA==";
$decrypted = openssl_decrypt($decrypt_data, 'AES-128-CBC',$decrypt_key,OPENSSL_ZERO_PADDING, $iv);
//解密结果
//echo $decrypted;
//********************************结束********************************** //********************************加密********************************** $data = "你好";
$method = 'AES-128-CBC';//加密方法
$result = openssl_encrypt($data, $method, $decrypt_key, 0,$iv);
var_dump($result); $a = openssl_decrypt($result,$method,$decrypt_key,0,$iv);
var_dump($a); //********************************结束**********************************

js前端加密,php后端解密(crypto-js,openssl_decrypt)的更多相关文章

  1. JS前端加密JAVA后端解密详解

    最近有一个加解密的需求,其实没有什么难度,但是实践过程中踩了很多坑,把踩坑过程分享出来. 1.前端JS加密 /** * 加密(需要先加载aes.min.js文件) * @param word * @r ...

  2. Java 前端加密传输后端解密以及验证码功能

    目录(?)[-] 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 概 ...

  3. 转发:RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...

  4. RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...

  5. rsa实现js前台加密java后台解密

    前段时间写了一个rsa前台加密到后台用java解密,下面共享下实现思路: 准备工作:第三方包是必须的 bcprov-jdk15on-148.jar commons-codec-1.7.jar comm ...

  6. js base64加密,后台解密

    这是为了解决页面发送post请求,传输密码,在页面的控制台可以看到密码的明文,所以先用base64把要传输的密码转换为非明文,然后在后台解密处理. base64encode.js // base64加 ...

  7. angular.js前端分层开发(页面和js代码分离,并将js代码分层)

    一. 抽取模块成base.js文件// 定义模块: var app = angular.module("eshop",['pagination']); 二. 抽取服务成brandS ...

  8. 【转】JS前台加密,java后台解密实现

    因项目需求,需要一些敏感信息进行加密,不能以明文暴露到浏览器. 然后后台进行解密操作 先看一下效果图 未对其加密传输 1.前台JS <script type="text/javascr ...

  9. json传参 js前端和java后端 的简单例子

    下面讲解了从前端js对象-->json字符串-->java字符串---->java map的过程 1,初始化js对象 var param = {}; param.krel = kre ...

随机推荐

  1. Html 慕课园编程练习10-1

    23:10:25 2019-08-14 自己写的这个好丑.... 题目:利用之前我们学过的JavaScript知识,实现选项卡切换的效果. 效果图: (另外 这个动图是怎么插入的 用url就行 复制就 ...

  2. Wireshark的使用(抓包、过滤器)

    Wireshark的使用(抓包.过滤器) 听语音 分步阅读 Wireshark这个转包工具的简单实用 工具/原料 Wireshark软件包 方法/步骤 Wireshark是世界上最流行的网络分析工具. ...

  3. 【memcache】Memcached

    一.Memcached 简介 1. 官网:http://www.memcached.org 2. Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. 二.作用: 1. 将数据存入内存 ...

  4. 【php】文件系统

    一. 了解文件: a) 我们在Windows当中已知众多种文件类型:png.jpeg.jpg.gif.mp3.mp4.avi.rmvb.txt.doc.exl.ppt.php.exe b) 无论我们w ...

  5. 在线优化算法 FTRL 的原理与实现

    在线学习想要解决的问题 在线学习 ( \(\it{Online \;Learning}\) ) 代表了一系列机器学习算法,特点是每来一个样本就能训练,能够根据线上反馈数据,实时快速地进行模型调整,使得 ...

  6. 打造一款 刷Java 知识的小程序(二)

    学习Java的神器已上线,面向广大Java爱好者! 之前写的一篇:打造一款 刷Java 知识的小程序(一) 一.第二版做了什么? 第一版小程序只具有初级展示功能,知识点都是hardcode在代码里面的 ...

  7. idea 快捷键 pvsm sout

    1.在IntelJ中和Eclipse中稍有不同,在Eclipse中,输入main再按Alt+/即可自动补全main函数,但是在IntellJ中则是输入psvm,选中即可 2.在方法体内部有for循环, ...

  8. 六、路由详细介绍之动态路由RIP(了解一下就行)

    动态路由分为距离矢量路由(RIP)和链路状态(OSPF和ISIS) 一.离矢量路由协议-RIP RIP协议现在基本上被淘汰. RIP动态路由协议工作原理,如上图: R12中有192.168.1.0和1 ...

  9. 05-CSV文件读取(问题)

    1.支持.txt,.log,.json三种格式 并且也支持.csv格式文件类型----.csv在使用时会出现乱码情况 2.当时遇到问题: CSV文件.txt文本内有数据,如:user ,pwd adm ...

  10. java实现图片的上传和展示

    一.注意事项: 1,该项目主要采用的是springboot+thymeleaf框架 2,代码展示的为ajax完成图片上传(如果不用ajax只需要改变相应的form表单配置即可) 二.效果实现: 1,页 ...