文档章节

Java Web 登录采用非对称加密(RSA算法)

chaun
 chaun
发布于 2015/10/19 23:26
字数 524
阅读 712
收藏 2

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

登录时采用md5或者base64神马的加密都是不可靠的,被抓包了还是可以模拟登录的,基本没啥用,只能说好过没有...

接下来跟大家介绍下如何采用非对称加密,非对称加密的过程其实就是和https加密原理一样,我的处理过程是这样:

a. 在登录页面生成公钥和私钥,将私钥存在sesion中

b.公钥用于前端页面对数据进行加密

c.将数据传输给后台,后台从session中拿到私钥,然后对数据进行解密,把session中的私钥删除

下面简单记录下实现过程,具体的工具类RSAUtils.java的实现不在这里细说。


1、在JSP中生成公钥和私钥,将公钥放在session中:

HashMap<String, Object> map = RSAUtils.getKeys();
   //生成公钥和私钥  
   RSAPublicKey publicKey = (RSAPublicKey) map.get("public");
   RSAPrivateKey privateKey = (RSAPrivateKey) map.get("private");
 //私钥保存在session中,用于解密
   session.setAttribute("privateKey", privateKey);
   //公钥信息保存在页面,用于加密
   String publicKeyExponent = publicKey.getPublicExponent().toString(16);
   String publicKeyModulus = publicKey.getModulus().toString(16);
   request.setAttribute("publicKeyExponent", publicKeyExponent);
   request.setAttribute("publicKeyModulus", publicKeyModulus);

2、对数据进行加密,用到的前端js工具封装在RSA.js中,需引入到页面。

RSAUtils.setMaxDigits(200);
   var key = new RSAUtils.getKeyPair("${publicKeyExponent}", "", "${publicKeyModulus}");
   var encrypedPwd = RSAUtils.encryptedString(key,orgPwd.split("").reverse().join(""));
其中,orgPwd为原始数据,这里是我的密码。


3、后台对接收到的数据进行解密。

String password=request.getParameter("password");
<span style="white-space:pre">	</span>RSAPrivateKey privateKey = (RSAPrivateKey)request.getSession().getAttribute("privateKey");
			if(privateKey!=null){
				long time1 = System.currentTimeMillis();
				password = RSAUtils.decryptByPrivateKey(password, privateKey);
				log.info("decrypt cost time:"+(Double)((System.currentTimeMillis()-time1)/1000d) +"s");
				request.getSession().removeAttribute("privateKey");
			}


特别注意事项:RSAUtils.java中用到org.bouncycastle.jce.provider.BouncyCastleProvider,部署在服务器上时需做如下两项配置:

a. 修改jdk目录下的 /jre/lib/security/java.security,增加如下配置:


b. 放bcprov-jdk16-146.jar 到 jdk目录下的/jre/lib/ext 下。

在eclipse中开发调试倒是不需要,但部署上服务器时需要,切记!


附件:

1. RSA.js http://pan.baidu.com/s/1ntr99LR

2.RSAUtils.java http://pan.baidu.com/s/1o6l1Wnw

3.bcprov-jdk16-146.jar http://pan.baidu.com/s/1i3EIw0P




版权声明:本文为博主原创文章,未经博主允许不得转载。

chaun
粉丝 92
博文 271
码字总数 91117
作品 0
深圳
高级程序员
私信 提问
加载中
请先登录后再评论。
Java加密技术(三)——PBE算法

除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法——PBE PBE PBE——Password-...

闪电
2015/05/22
46
0
Java加密技术(三)——PBE算法

除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法——PBE PBE PBE——Password-...

五大三粗
2015/05/29
0
0
Java加密技术(三)——PBE算法

除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法——PBE PBE PBE——Password-...

莫海涌
2014/04/12
58
0
Java加密技术(八)——数字证书

本篇的主要内容为Java证书体系的实现。 请大家在阅读本篇内容时先阅读 Java加密技术(四),预先了解RSA加密算法。 在构建Java代码实现前,我们需要完成证书的制作。 1.生成keyStroe文件 在命...

五大三粗
2015/05/29
0
0
java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全

前言 在参考互联网大厂的登录、订单、提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文。而为了目前项目安全,我自己负责的项目也需要这方面的技术。由于,我当前的项目是使用...

冬子哥
2018/09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

十年饮冰,难凉热血.高考失利的同学们应该怎么学习

今天练车的时候跟几个朋友聊了会天,朋友考的学校都比较好,一个山大,一个山师大,一个上师大,让我个人夹杂在他们当中作为一个高考失败者实属自卑,虽然一直在尽力准备专升本,但是难免现阶...

osc_n3mzii7x
30分钟前
28
0
阿里巴巴矢量图标库的使用

在参考小米官网写页面你时,会发现小米中有很多的矢量图标,小米的图标或许是自己的,但是我们写页面时要用到矢量图标时怎么办,可以使用阿里提供的图标库 阿里矢量图标库网址:https://www...

osc_r9wwwi0j
30分钟前
13
0
JS数据结构与算法 - 排序(冒泡、选择、插入、归并、快排)

🌸本文主要内容: 各排序算法时间复杂度 js默认sort算法于各浏览器中的实现 1.冒泡排序 2.选择排序 3.插入排序 4.归并排序(含小动画) 5.快速排序(含小动画) 时间复杂度 O(1) < O(logn)...

osc_ccy4urvn
32分钟前
15
0
使用before和after属性选择器

最近仿造了小米官网写了一遍,可以说是完全把官网给写完了。 官网中有一个log切换的动态效果,有点把我卡住了找方法找了许久,然后用一个简单的方法实现了: 先了解一下before和after两个属性...

osc_k1o54uky
32分钟前
29
0
健身以及未来科技如何解绑教育,医疗,养老依赖于地段(房产)

疫情后,谁来颠覆套路满满的健身房?硬核解析异军突起的家庭健身——鲜榨财经_哔哩哔 目前的keep,或者 其他在线教育 存在的痛点 就是 可交互性 不强。 未来 通过 5G,各种完善的传感器,以及...

osc_bvzab11e
34分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部