技术标签: php rsa加aes传输
今天我尝试通过RSA+AES方法来加密传输用户提交的密码,我已经完成了前端JS的编写(代码如下,并附一次运行结果截图,AES,RSA加密的值是会更变的),它使用了两个库,分别是jsencrypt和crypto-js,现在,我正在编写后端解密的PHP(代码如下),但是在这过程中我遇到了一点困难,RSA解密部分已经编写完毕并测试无误,但是我不懂得如何编写AES解密部分,即使我已经查阅了许多的资料,他们的例子与我有一些不同,我不懂得如何去使用它(文末我会附上一些例子)。
问题:
1,请问我的JS加密部分是否正确并符合逻辑;
2,请问我应该如何编写PHP AES解密部分;
3,请问我的思路是否正确?:
客户端(JavaScript):
AES 加密 原始用户密码
RSA 公钥 加密 AES秘钥
—数据传输—
服务端(PHP):
RSA 私钥 解密 获得 AES秘钥
AES 解密 获得 原始用户密码
再通过加密 原始用户密码 获得 加密用户密码 存储到 数据库 中
我的JavaScript代码:
$(function () {
//加密部分
//AES
var password_form="QAQ";
console.log(password_form);
var password = CryptoJS.AES.encrypt(password_form,'Lime Website').toString();
console.log(password);
//RSA
var public_key = $("#inputPublic_key").val();
console.log(public_key);
var private_key = $("#inputPrivate_key").val();
console.log(private_key);
var encrypt = new JSEncrypt();
encrypt.setPublicKey(public_key);
var AES_key = encrypt.encrypt(password);
console.log(AES_key);
//解密部分(实际应由服务端完成,此处为了方便所以写在这)
//RSA
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(private_key);
var AES_key_decrypt = decrypt.decrypt(AES_key);
console.log(AES_key_decrypt);
//AES
var bytes = CryptoJS.AES.decrypt(AES_key_decrypt,'Lime Website');
var password_decrypt = bytes.toString(CryptoJS.enc.Utf8);
console.log(password_decrypt);
});
我的PHP代码:
<?php
$private_key = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----';
$private_key_public_key_availability = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$AES_key = "iOks+yhKxQBiqtd5rHQRNdXOGqixhNzquuZuPZ5dDsYfh1nDTLiygukiyexNBqHfmA7zis1nRTZW2Nw4bN5Pr2yCgvh1GPV6K5WigO5jD1+ztuyp1hV5ymNSws6EUPPjW9cwrOpO7EIeiYjvGo7ziyPwsCU0vwtQAkNAFY3uhB0=";
$AES_key_decrypted = "";
echo "通过解密后数据:";
openssl_private_decrypt(base64_decode($AES_key),$AES_key_decrypted,$private_key_public_key_availability);
echo $AES_key_decrypted;
JavaScript其中一次运行结果的截图:
一些例子:
https://odan.github.io/2017/0…
https://stackoverflow.com/que…
https://stackoverflow.com/que…
最后感谢大家的回答吖QAQ
文章浏览阅读2w次,点赞18次,收藏203次。1、什么是同步逻辑和异步逻辑?同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。同步时序逻辑的特点:各触发器的时钟端全部连接在一起,并接在系统的时钟端,只有当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下一个时钟脉冲的到来,此时无论外部输入x有无变化,状态表中的每个状态都是稳定的。异步时序逻辑电路的特点:电路中除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件,电路中没有统一的时钟,电路状态的改变由外部输入的变化直接引起。2、同步电
文章浏览阅读5.6k次,点赞11次,收藏25次。list.sort(key=lambda x: (-len(x), x), reverse=True)将list首先根据长度排列,再按照abc字典顺序排列,最后按照降序排列。解释:reverse=True按照降序排列,reverse()为将整个列表反过来;lambda x是指具有排序规则:按照字母从小到大排序,或者按照字符串长度排序;(-len(x), x)是指首先用x的长度排序,如果长度相同则用出现的先后排序;两个排序原则,按照-len(x)排序,len(x)表明将长度从小到大排序,那么-le_a.sort(key=lambda x: sum(x[1:]), reverse=true)
文章浏览阅读395次。现在是互联网时代,信息的获取非常重要。一个人的搜索能力就是你的信息获取能力,当你拥有搜索能力可以让你做到事半功倍。今天分享一下虚拟资源怎么的几个途径:1.可以从各大相关的贴吧、论坛、网站上搜索例如PS教程就去PS吧、PS教程论坛等,小吃教程就去小吃教程吧、或者到网盘搜索,虫部落可以去找一下,很多资源都能找到,这样的方式成本比较低,但是需要你花费很多时间和精力一个个去搜索、下载、然后再整理。2.微信搜一搜这是一条比较容易被忽略的途径,一定要习惯性的用这里搜索功能,很强大,越来越多人会把优质的资源_搜索或输入网址火家都在搜热榜视叛应用购物附近漫画搜索历史清空历史在他暴戾
文章浏览阅读635次。1381. a*bConstraintsTime Limit: 1 secs, Memory Limit: 32 MB DescriptionGive two positive integers a and b, please help us calculate a*b.InputThe first line of the input is a positive i_sicily a * b 问题
文章浏览阅读4.9w次,点赞3次,收藏7次。可能自己在C++编程中没有处理好内存管理,导致电脑偶尔出现KERNEL_DATA_INPAGE_ERROR错误并蓝屏 重启。0×0000007A:KERNEL_DATA_INPAGE_ERROR 错误分析:这个错误往往是内存中的内核数据无法读如内存造成的。有可能是虚拟内存页面文件中存在坏簇、病毒、磁盘控制其错误、内存有问题。从页面文件读/加载存储在硬盘驱动器的信息存在一些问题。_kernel_data_inpage_error
文章浏览阅读1.8w次,点赞6次,收藏13次。Android代码中设置字体大小,字体颜色,显示两种颜色在xml文件中字体大小用的像素<TextView android:id="@+id/uppaid_time" android:layout_width="wrap_content" android:layout_height="wrap_content" ..._android:id调用的字怎么修改大小
文章浏览阅读1.1k次,点赞21次,收藏13次。本系列文章致力于用最简单的语言讲解Transformer架构,帮助朋友们理解它的强大,本文是第六篇:Transformer自注意力机制图文详解。_transformer 自注意力机制
文章浏览阅读2.2k次,点赞21次,收藏20次。【代码】安卓逆向学习之ADB的配置和使用及刷机root。_adb root
文章浏览阅读788次。若有代数式3ae/bc,则不正确的C语言表达式是( )更多相关问题Python字典支持双向索引。正则表达式模块re的_______方法用来在字符串开始处进行指定模式的匹配。Python字典中的“键”可以是元组。Python字典中的“键”不允许重复。表达式sorted([111, 2, 33], key=lambda x: len(str(x))) 的值为________________。已知 x ..._代数式3ae/bc,如何计算
文章浏览阅读10w+次,点赞117次,收藏915次。VScode安装好之后,我们还要知道,VScode毕竟是一个高级的编辑器,只能用来写C/C++代码,不能直接编译代码。同时,它还支持插件扩展,通过丰富的插件,用户能获得更多高效的功能。如果你的代码还是单独的一个.c文件,在当前打开文件夹中就可以编写,那就直接在当前打开的文件夹中新建.c源文件,编写代码,对当前的代码,直接执行【终端】->【运行生成任务】前面讲解的都是如何去编码代码,当我们生成一个可支持程序的时候,如果遇到了bug,我们就要想办法调试代码,那VScode如何调试代码呢?_vscode
文章浏览阅读252次。题目链接:https://codeforces.com/contest/1516A.Tit for Tat题意:给定一个数组,然后再给定n和k。你可以执行操作如下:给任意两个不同的元素(下标不同)一个加上1,一个减掉1。最多执行k次这样的操作,请你给出一个字典序最小的数组。..._xooo3
文章浏览阅读1.7k次。目录 一、RDMA抓包 1.ibdump 2.tcpdump (docker,Linux内核从4.9以上) 3.Offloaded Traffic Sniffer(tcpdump,ConnectX-4以上的版本,libpcap库v1.9或更高版本) ibdump 用法说明 数据收发测试工具: 二、抓包结果分析 RDMA抓包 目录 ..._ibdump