文档章节

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

chaun
 chaun
发布于 2015/10/19 23:26
字数 524
阅读 60
收藏 2
点赞 0
评论 0

登录时采用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




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

本文转载自:http://blog.csdn.net/linshutao/article/details/44062539

共有 人打赏支持
chaun
粉丝 85
博文 262
码字总数 96237
作品 0
深圳
高级程序员
Java开发必须要掌握的加密方式。

第一种类型加密方式:数字摘要(不可逆) 数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash函数对消息进行计算而产生。 注:这个串有固定的长度,且不...

java高级架构牛人 ⋅ 06/12 ⋅ 0

Android外部文件加解密及应用实践

有这样的应用场景,当我们把一些重要文件放到asset文件夹中时,把.apk解压是可以直接拿到这个文件的,一些涉及到重要信息的文件我们并不想被反编译拿去,这个时候需要先对文件进行加密,然后...

C6C ⋅ 05/08 ⋅ 0

基于 Cookie 的 SSO 中间件 - kisso

kisso = cookie sso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞士军刀。欢迎大家使用 kisso !! kisso 帮助文档下载 1、支持单点登录 2、支持登录Cookie缓存...

青苗 ⋅ 2014/06/18 ⋅ 21

Java 5 、6、 7中新特性

JDK5新特性(与1.4相比)【转】 1 循环 for (type variable : array){ body} for (type variable : arrayList){body} 而1.4必须是: for (int i = 0; i < array.length; i++){ type variabl......

thinkyoung ⋅ 2014/10/14 ⋅ 0

基于ClassLoader的java代码加密的经验分享

原理就是 生成项目时将待加密的java class文件通过加密算法转换生成加密的二进制文件,此文件不会被JD-GUI等反编译工具直接解密。 项目在启动时,用自定义的ClassLoader将加密的二进制文件进...

hxt168 ⋅ 06/06 ⋅ 0

PBFT共识算法详细分析及Java实现

PBFT共识算法详细分析及Java实现 为什么写这个 最近研究了区块链相关的一些东西,其实就三大块: 分布式存储(去中心) 共识机制 安全加密 分布式存储,就是一个分布式数据库,每个节点都保存...

andylo25 ⋅ 06/15 ⋅ 0

通过 HttpAuthenticationMechanism 执行 Web 身份验证

通过 Java EE 8 中新的注解驱动的 HTTP 身份验证机制执行经典和自定义的 Servlet 身份验证 系列内容: 此内容是该系列 4 部分中的第 # 部分: Java EE 8 Security API 入门,第 2 部分 http...

Alex Theedom ⋅ 04/02 ⋅ 0

Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区 ⋅ 05/09 ⋅ 0

热修复与插件化基础——Java与Android虚拟机

一、Java虚拟机(JVM) 1、JVM整体结构 使用javac将java文件编译成class文件。 类加载器(ClassLoader)将class字节码加载进JVM对应的内存中。 JVM将内存分配给方法区、堆区、栈区、本地方式...

CSDN_LQR ⋅ 05/13 ⋅ 0

聊聊JAVA虚拟机中的垃圾收集器

前言 JAVA虚拟机的垃圾收集器是虚拟机内存的清道夫,它的存在让JAVA开发人员能将更多精力投入到业务研发上。了解垃圾收集器,并利用好这个工具,能更好的保障服务稳定性。这篇文章通过分析J...

lilugoodjob ⋅ 05/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

关于“幂等”操作

一个幂等(idempotent)操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同. 开发中, 我们经常考虑幂等操作的场景有“接口调用”、“MQ消费”、“自动任务”等 接口调用, 可能出现...

零二一七 ⋅ 26分钟前 ⋅ 0

Dubbo服务服务暴露之ProxyFactory Invoker

Dubbo服务暴露过程中有涉及到调用ProxyFactory 中方法获取Invoker对象的过程,现在我们来深究下源码,来看下这个过程是在做些什么,返回的Invoker 对象是什么,我们来看一下代码的切入点: ...

哲别0 ⋅ 41分钟前 ⋅ 0

GP两种连接方式性能测试

GP两种连接方式性能测试 Pivotal import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class GPQueryStrin......

仔仔1993 ⋅ 45分钟前 ⋅ 0

jsonrpc-4j代码解析

解析文件 AutoJsonRpcServiceImplExporter JsonServiceExporter AutoJsonRpcServiceImplExporter 路径:com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImplExporter AutoJsonRpcServi......

郭恩洲_OSC博客 ⋅ 今天 ⋅ 0

百度搜索

from selenium import webdriver import time brower=webdriver.Firefox() brower.get('http://www.baidu.com') input=brower.find_element_by_id('kw') input.send_keys('中南大学') time.s......

南桥北木 ⋅ 今天 ⋅ 0

tomcat 日志记录器

1、日志记录器是记录消息的组件 日志记录器需要与某个servlet 容器相关联 2、Logger 接口 共定义了5种日志级别:FATAL、ERROR、WARNING、INFORMATION、DEBUGGER setVerbosity 设置级别 setC...

职业搬砖20年 ⋅ 今天 ⋅ 0

Thrift RPC实战(三) Thrift序列化机制

1.Thrift基础架构 Thrift是一个客户端和服务端的架构体系,数据通过socket传输; 具有自己内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports); 通过IDL脚本对传输数据的数据结构...

lemonLove ⋅ 今天 ⋅ 0

网站建设就要像2018世界杯的俄罗斯队大杀四方[图]

今天心情不错,因为昨天晚上观看了世界杯比赛,尤其是对俄罗斯队的大杀四方感到十分霸气侧漏啊,因此我联想到了自己的博客网站,我的博客是去年年底上线的,一直想建设一个关于读书和读后感作...

原创小博客 ⋅ 今天 ⋅ 0

linux 信号机制

signal(SIGPIPE, SIG_IGN); TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协...

xxdd ⋅ 今天 ⋅ 0

my.cnf, my-small.cnf, my-medium.cnf, my-large.cnf

1. my-small.cnf # Example MySQL config file for small systems.## This is for a system with little memory (<= 64M) where MySQL is only used# from time to time and it's importa......

周云台 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部