js php后端 安全,前端JS RSA加密,PHP后端解密实现密码安全传输
在设计用户注册登陆系统的时候,密码的安全传输一直是一个需要特别引起注意的地方,很多网站包括大型网站依然还是采用明文传输密码的方式,安全隐患需要注意。当然,为了防止第三人的恶意窃听,不少网站已经启用了HTTPS的加密传输。
那么,对于一些目前还不具备启用https加密传输的网站来说,飘易建议大家在前端采用js rsa加密,后端再采用PHP/JAVA进行RSA解密的方式保证密码的安全传输。
RSA是什么?
RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。目前该加密方式广泛用于网上银行、数字签名等场合。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
JS前端RSA加密需要用到第三方的加密组件JSENCRYPT:第三方加密组件,具体的大家可以到github上看下。
在开始之前,我们先要使用OpenSSL生成一对公钥、私钥,为了方便讲述,飘易还是直接提供一对生成好的公钥、私钥,至于如何生成,网上资料很多了。支付宝那里也有关于RSA密钥生成的文档:RSA密钥文档,支付宝提供了一键生成工具
Windows : 下载
macOS : 下载
私钥:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDAbfx4VggVVpcfCjzQ+nEiJ2DLnRg3e2QdDf/m/qMvtqXi4xhw
vbpHfaX46CzQznU8l9NJtF28pTSZSKnE/791MJfVnucVcJcxRAEcpPprb8X3hfdx
KEEYjOPAuVseewmO5cM+x7zi9FWbZ89uOp5sxjMnlVjDaIczKTRx+7vn2wIDAQAB
AoGAZzUWajxKTZeJqh5FjBgmwZi5M7voFynZAjRWAkCkqZye0FfY7e70kA92C1AL
aVqySnNr4WYZuGorEeOFGqHIv1XSowTLgfLkVBZ/SXiep2QYJrR0YevjysvLnTfb
mrdWCqWSj+0AlQg+AvDA/qtvBVMxKymbpo+4bj5H2pPPZ1ECQQDi1PwJQJBYPbpL
vGmP3AmWg467tCeQ+aJGgtQTOK5BH+p0BWFVDX583R437vllkKI8EXgZfqQfsQcj
7XUAXyZVAkEA2SyFbO8roH9JLrEoxxKGeiGZvhPfNl9nXLhX0OFS0ywQaVBJno39
9W5bX5iP5Jzeb3UWsZ/TxzhGc/b4WjAlbwJBAOFuIn1feRT5Y+hY++BJIg4/+N57
EMd4ENpas0HXFvcKLQvZPP42Rvr5FksoaRuTPmjMQ7uyrJICccI3AAy6g3ECQQDE
AyH9+zRmLNxRj0advsOvUcpgu7DYc21oS12/Qs+tl3TMiNGZkNDphwxjkOA217sP
4B92fCn6AnncSslHJXNzAkBo6ujxqIfrZMOG3ON9nXxkWlq39GFS6CzXWscHA3Xz
FMVT1WWU3FR2Kf2QSKiMGv02YcI2xfowim3JnT6600N0
-----END RSA PRIVATE KEY-----
公钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAbfx4VggVVpcfCjzQ+nEiJ2DL
nRg3e2QdDf/m/qMvtqXi4xhwvbpHfaX46CzQznU8l9NJtF28pTSZSKnE/791MJfV
nucVcJcxRAEcpPprb8X3hfdxKEEYjOPAuVseewmO5cM+x7zi9FWbZ89uOp5sxjMn
lVjDaIczKTRx+7vn2wIDAQAB
-----END PUBLIC KEY-----
JS前端的加密方法:
var pubkey=’-----BEGIN PUBLIC KEY-----’;
pubkey+=‘MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAbfx4VggVVpcfCjzQ+nEiJ2DL’;
pubkey+=‘nRg3e2QdDf/m/qMvtqXi4xhwvbpHfaX46CzQznU8l9NJtF28pTSZSKnE/791MJfV’;
pubkey+=‘nucVcJcxRAEcpPprb8X3hfdxKEEYjOPAuVseewmO5cM+x7zi9FWbZ89uOp5sxjMn’;
pubkey+=‘lVjDaIczKTRx+7vn2wIDAQAB’;
pubkey+=’-----END PUBLIC KEY-----’;
// 利用公钥加密
var encrypt = new JSEncrypt();
encrypt.setPublicKey(pubkey);
var encrypted = encrypt.encrypt(JSON.stringify({“encrypt”: “yes”, “password”: $("#password").val()}));
$(’#input’).val(encrypted);
前端页面上对应的input输入框为:
密码:
加密后的密文(base64):
然后后端收到前端提交的数据,利用RSA私钥进行解密,我们以PHP举例来说: <?php //rsa 私钥 $private_key='-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDAbfx4VggVVpcfCjzQ+nEiJ2DLnRg3e2QdDf/m/qMvtqXi4xhw vbpHfaX46CzQznU8l9NJtF28pTSZSKnE/791MJfVnucVcJcxRAEcpPprb8X3hfdx KEEYjOPAuVseewmO5cM+x7zi9FWbZ89uOp5sxjMnlVjDaIczKTRx+7vn2wIDAQAB AoGAZzUWajxKTZeJqh5FjBgmwZi5M7voFynZAjRWAkCkqZye0FfY7e70kA92C1AL aVqySnNr4WYZuGorEeOFGqHIv1XSowTLgfLkVBZ/SXiep2QYJrR0YevjysvLnTfb mrdWCqWSj+0AlQg+AvDA/qtvBVMxKymbpo+4bj5H2pPPZ1ECQQDi1PwJQJBYPbpL vGmP3AmWg467tCeQ+aJGgtQTOK5BH+p0BWFVDX583R437vllkKI8EXgZfqQfsQcj 7XUAXyZVAkEA2SyFbO8roH9JLrEoxxKGeiGZvhPfNl9nXLhX0OFS0ywQaVBJno39 9W5bX5iP5Jzeb3UWsZ/TxzhGc/b4WjAlbwJBAOFuIn1feRT5Y+hY++BJIg4/+N57 EMd4ENpas0HXFvcKLQvZPP42Rvr5FksoaRuTPmjMQ7uyrJICccI3AAy6g3ECQQDE AyH9+zRmLNxRj0advsOvUcpgu7DYc21oS12/Qs+tl3TMiNGZkNDphwxjkOA217sP 4B92fCn6AnncSslHJXNzAkBo6ujxqIfrZMOG3ON9nXxkWlq39GFS6CzXWscHA3Xz FMVT1WWU3FR2Kf2QSKiMGv02YcI2xfowim3JnT6600N0 -----END RSA PRIVATE KEY-----'; //从前端拿到的RSA加密数据 $es='CP51TfQsTXrkVeDxkkDJcO9YF6gHmIJfHX6GBLguYCXKl3A7SCn1zhXXUSwmj+MuIOh4HtsKLre3ukUOehU5V5cPYpkajCCQ5mRZfxdbOUEBNW/mT66RYmQ08WO4NGvIRriLx5LsGtS4VF4uE+8aM+mUvab6jOVUUFotqPTUyu4='; //私钥解密 openssl_private_decrypt(base64_decode($es),$decrypted,$private_key); echo $decrypted; $encrypt_exist=false; if(!empty($decrypted)) { $arr = json_decode($decrypted, true); if(array_key_exists("encrypt",$arr)) { if($arr['encrypt']=="yes") $encrypt_exist=true; } } if(!$encrypt_exist) die("抱歉!数据提交错误!"); //继续后续处理 var_dump($arr); ?>
标签:公钥,加密,RSA,JS,-----,KEY,PHP,pubkey
来源: https://blog.csdn.net/weixin_42127508/article/details/112390854
js php后端 安全,前端JS RSA加密,PHP后端解密实现密码安全传输相关推荐
- 前端JS RSA加密,PHP后端解密实现密码安全传输
在设计用户注册登陆系统的时候,密码的安全传输一直是一个需要特别引起注意的地方,很多网站包括大型网站依然还是采用明文传输密码的方式,安全隐患需要注意.当然,为了防止第三人的恶意窃听,不少网站已经启用了H ...
- python后端开发框架加密_Flask框架实现的前端RSA加密与后端Python解密功能详解
本文实例讲述了Flask框架实现的前端RSA加密与后端Python解密功能.分享给大家供大家参考,具体如下: 前言 在使用 Flask 开发用户登录API的时候,我之前都是明文传输 username ...
- python写网页前端交易rsa加密_Flask框架实现的前端RSA加密与后端Python解密功能详解!...
本文实例讲述了Flask框架实现的前端RSA加密与后端Python解密功能.分享给大家供大家参考,具体如下: 前言 在使用 Flask 开发用户登录API的时候,我之前都是明文传输 username ...
- vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)
vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈) 这篇文章是博主在看vue-前端发展简史的时候做的笔记,以供后续学习复习 文章目录 vue学习笔记-01-前端的发展历 ...
- 企业付款到银行卡API,RSA加密总是报解密真实姓名或银行卡号出错?
最近对接企业付款到银行卡的过程中,总是提示RSA加密总是报解密真实姓名或银行卡号出错 最后发现是为了通用在公钥加密私钥解密的代码中使用了非默认的OPENSSL_PKCS1_OAEP_PADDING填充 ...
- 基于RSA加密和Tkinter可视化的密码存储程序(可用于期末作业设计、Python练习、实用应用;抗错误输入、抗密码盗取)二:登录、注册界面
此篇接上篇,有兴趣的可以去主页或专栏看看,没有的话咱直接开始: 基于RSA加密和Tkinter可视化的密码存储程序(可用于期末作业设计.Python练习.实用应用:抗错误输入.抗密码盗取)一:思路介绍 ...
- rsa加密前后端分段解密出现中文部分乱码解决方法
问题图: 因为前端rsa 分段解密的时候汉字 字节代表3个字节,在解密最大长度分界如果3个字节被分隔成了两段转成string就会乱码了 解决办法:前端/java可以先用js自带的方法(encodeUR ...
- 前端(Vue)sha512加密、后端(Java)sha512加密后加盐实现完整流程
搜索时发现sha512加密(加盐)的内容很少 所以过来添一块砖 文章目录 写在前面 一.理解一下SHA512加盐 二.前端项目实现SHA512加密 1.前端页面中引入js工具类 2.调用CryptoJ ...
- js输出php文件大小,前端js实现文件的断点续传 后端PHP文件接收
早就听说过断点续传这种东西,前端也可以实现一下. 断点续传在前端的实现主要依赖着HTML5的新特性,所以一般来说在老旧浏览器上支持度是不高的 本文通过断点续传的简单例子(前端文件提交+后端PHP文件接 ...
- js增加属性_前端js基础2
JavaScript ECMAScript(ES):规定了js的一些基础的核心知识(变量.数据类型.语法规范.操作语句等) 3/5==6/7 说出ES5和ES6的区别? DOM:document ob ...
最新文章
- mysql免安装教程
- Dockerfile的介绍
- JDK 监控和故障处理工具总结
- java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()的问题解决
- SAP Spartacus category navigation按钮的差异
- mysql8.0 密码认证插件_只需使用VS Code的REST客户端插件即可进行API调用
- 大道至简第四章读后感
- shift-and(HDU 5972 2016ICPC大连 B: Regular Number)
- HDOJ-1201 18岁生日
- Lock和synchronized的区别和使用(转载)
- masm5安装教程_MASM 6.11的安装与设置
- oracle 高级dba,DAVE老师Oracle DBA高级运维深入解析实战班 高级DBA运维视频 Oracle视频教程...
- 水经注万能地图下载器、影像插件和转换器的功能与关系
- pdf加水印的方法,pdf如何加水印?
- Mac os X 常用技巧
- 如何提高用户逃离成本
- 曾国藩:统领30万湘军,只靠这4句话
- Mybatis源码解析——入门级
- 自动驾驶系列(二) - 路径规划五种算法简述及对比
- linux系统给安卓root权限,安卓手机该如何获取Root权限?方法很简单,但不建议Root...