博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS AES加密与PHP解密
阅读量:7196 次
发布时间:2019-06-29

本文共 2863 字,大约阅读时间需要 9 分钟。

网页端(在没有https情况下)给密码之类的加密传输,虽然多此一举,也好过直接监控软件就能看到密码

思路

在传输密码的时候,先向后台获取一个随机码或者验证码,作为秘钥,网页端根据这个秘钥,加密要传输的数据,服务端先验证验证码是否正确,如果验证正确,根据验证码进行数据解密

fox.风

PHP

class AesJs{
/**向量 * @var string */ private static $iv = "1234567890123412";//16位 /** * 默认秘钥 */ const KEY = '1111111111111123';//16位 public static function init($iv = '') {
self::$iv = $iv; } /** * 加密字符串 * @param string $data 字符串 * @param string $key 加密key * @return string */ public static function encrypt($data = '', $key = self::KEY) {
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, self::$iv); return base64_encode($encrypted); } /** * 解密字符串 * @param string $data 字符串 * @param string $key 加密key * @return string */ public static function decrypt($data = '', $key = self::KEY) {
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($data), MCRYPT_MODE_CBC, self::$iv); return rtrim($decrypted, "\0"); }}//调用//加密AesJs::encrypt('要加密的字符串','秘钥');//解密AesJs::decrypt('要解密的字符串','秘钥');

JS

下载地址:

1.
2. (build 目录下)
先加载js文件

/** * 加密 */function encrypt(str,key) {
key = CryptoJS.enc.Utf8.parse(key?key:"1111111111111111");// 秘钥 var iv= CryptoJS.enc.Utf8.parse('1234567890123412');//向量iv var encrypted = CryptoJS.AES.encrypt(str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }); return encrypted.toString();}/** * 解密 * @param str */function decrypt(str) {
var key = CryptoJS.enc.Utf8.parse("1111111111111111");// 秘钥 var iv= CryptoJS.enc.Utf8.parse('1234567890123412');//向量iv var decrypted = CryptoJS.AES.decrypt(str,key,{iv:iv,padding:CryptoJS.pad.ZeroPadding}); return decrypted.toString(CryptoJS.enc.Utf8);}//调用//加密console.log(encrypt("12345"));//解密console.log(decrypt("待解密字符"));

实际使用

JS

//加密部分要改造一下/** * 加密 */function encrypt(str,key) {
key = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(key).toString());//秘钥 var iv= CryptoJS.enc.Utf8.parse('1234567890123412');//向量iv var encrypted = CryptoJS.AES.encrypt(str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }); return encrypted.toString();}//验证码 转换成大写var username=$('#username').val();//获取用户名var pwd=$('#pwd').val();//获取密码var verify=$('#verify').val();//获取验证码verify = verify.toUpperCase();var json = {username: username, pwd: pwd};//被加密的数据var aes = encrypt(JSON.stringify(json), verify);//加密var param = {verify: verify, param: aes};$.post("/user/login?_=" + new Date().getTime(), param, function (data) {
if (data) { ... } else { .... }}, "json");

PHP

$verify=input('verify');//验证码$param=input('param');//加密后数据//先转换成大写//然后MD5$json=AesJs::decrypt($param,md5(strtoupper($verify)));echo $json;$arr=json_decode($json,true);print_r($arr);

来源

转载地址:http://glkum.baihongyu.com/

你可能感兴趣的文章
波浪刻度电池View
查看>>
转 网络编程学习笔记一:Socket编程
查看>>
HSTS VS 301 redirect
查看>>
第七周作业
查看>>
如何在androidstudio中运行java程序
查看>>
Http协议
查看>>
C++中消息自动派发之一 About JSON
查看>>
MongoDB系列:三、springboot整合mongoDB的简单demo
查看>>
WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
查看>>
Linux 内核 链表 的简单模拟(1)
查看>>
第一个开源项目---halcon图像显示控件(缩放/roi操作)
查看>>
00 常用网址及文档链接(随时更新)
查看>>
闰年判断(蓝桥杯)
查看>>
13.Axis创建webservice客户端和服务端
查看>>
9.Maven之(九)依赖关系
查看>>
eclipse不小心删除文件如何恢复
查看>>
Material Design 现在不仅仅是设计指南
查看>>
sqlite批量插入数据巨慢,java解决方案
查看>>
不使用ajax,无刷新提交表单
查看>>
[转]Android最佳实践之:StrictMode介绍
查看>>