基于RSA securID的Radius二次验证java实现(PAP验证方式)
基于rsa SecurID的二次验证。RSA server自身可以作为Radius服务器,RSA也可以和其他的软件集合,使用其他的server作为Radius服务器。
radius的验证的一般流程如下图:

用java实现的主要代码实现如下(需要导入radius相关jar包,主要为radiusclient3.jar):
①radius第一次验证, RADIUSClient的4个参数分别为server ip,port,Radius的密钥,radius输入超时时间. authenticate的username和password即为所需要验证的用户.
RADIUSClient r = null;
int nResult = 0; r = new RADIUSClient("ip", port , "secret" , radius_soctet_timeout);
r.setDebug(true);
AttributeList aList = new AttributeList();
aList.addAttribute(Attribute.NAS_Port, 1);
nResult = r.authenticate(username, password, aList);
②跟据返回的nResult进行判断.代码中的数字3代表access_reject, 数字0代表access_badpacket, 数字11代表access_challenge, 数字2代表access_accept.
当遇到access_challenge时,有两种情况,一只是需要new pin(new pin的情况相对复杂一点), 另一种是需要next token.另外,这个Attribute.State属性是一直要继承的,用来区分
是否是我们需要的那一次验证(如代码25, 26行,就把state带入下一次验证,用来验证识别).
switch (nResult) {
case 3:
try{
AttributeList response = r.getAttributes();
AttributeList state = response.getAttributeList(Attribute.State);
}
catch(Exception e){
}
break;
case 0:
break;
case 11:
AttributeList response = r.getAttributes();
AttributeList state = response.getAttributeList(Attribute.State);
r.reset();
System.out.println(":");
Scanner sa = new Scanner(System.in);
String sl = sa.next();
String mima = sl + "";
AttributeList attList = new AttributeList();
attList.addAttribute(Attribute.NAS_Port, 1);
attList.mergeAttributes(state);
nResult = r.authenticate(username, mima, attList);
System.out.println(r.getPacketType());
System.out.println("r.getErrorString():" + r.getErrorString());
System.out.println("Second nResult:" + nResult);
if(nResult == 11){
AttributeList rresponse = r.getAttributes();
AttributeList sstate = rresponse.getAttributeList(Attribute.State);
r.reset();
System.out.println("re new pins");
Scanner ssa = new Scanner(System.in);
String ssl = ssa.next();
String renewpin = ssl + "";
System.out.println(renewpin);
AttributeList aattList = new AttributeList();
aattList.addAttribute(Attribute.NAS_Port, 1);
aattList.mergeAttributes(sstate);
nResult = r.authenticate(username, renewpin, aattList);
System.out.println(r.getPacketType());
System.out.println("r.getErrorString():" + r.getErrorString());
if (nResult == 11){
AttributeList rrresponse = r.getAttributes();
AttributeList ssstate = rrresponse.getAttributeList(Attribute.State);
r.reset();
System.out.println("posscode");
Scanner ressa = new Scanner(System.in);
String ressl = ressa.next();
String passcode = ressl + "";
AttributeList reaattList = new AttributeList();
reaattList.addAttribute(Attribute.NAS_Port, 1);
nResult = r.authenticate(username, passcode, reaattList);
System.out.println(r.getPacketType());
System.out.println("r.getErrorString():" + r.getErrorString());
System.out.println("nResult:" + nResult);
if (nResult == 2){
return "AUTH SUCCESS";
}
}
}
if (nResult == 2){
return "AUTH SUCCESS";
}
case 2:
return "AUTH SUCCESS";
default:
break;
}
return "AUTH FAILURE";
转载请注明出处:http://www.cnblogs.com/huhanbo/p/4087827.html
基于RSA securID的Radius二次验证java实现(PAP验证方式)的更多相关文章
- 基于RSA的前后端登陆密码加密JAVA实现(转)
RSA加密算法简介 SA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难,RSA算法愈 ...
- 【转】基于RSA算法实现软件注册码原理初讨
1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...
- C#基于RSA加密算法实现软件注册实战演练
一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...
- 一个基于RSA算法的Java数字签名例子
原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...
- 【转载】非对称加密过程详解(基于RSA非对称加密算法实现)
1.非对称加密过程: 假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...
- 【编程开发】非对称加密过程详解(基于RSA非对称加密算法实现)
1.非对称加密过程: 假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...
- Struts(二十四):短路验证&重写实现转换验证失败时短路&非字段验证
短路验证: 若对一个字段使用多个验证器,默认情况下会执行所有的验证.若希望前面的验证器没有通过,后面的验证器就不再执行,可以使用短路验证. 1.如下拦截器,如果输入字符串,提交表单后,默认是会出现三个 ...
- Struts(二十三):使用声名式验证
Struts2工程中的验证分为两种: 1.基于XWork Validation Framework的声明式验证:Struts2提供了一些基于XWork Validation Framework的内建验 ...
- [更新]一份包含: 采用RSA JWT(Json Web Token, RSA加密)的OAUTH2.0,HTTP BASIC,本地数据库验证,Windows域验证,单点登录的Spring Security配置文件
没有任何注释,表怪我(¬_¬) 更新: 2016.05.29: 将AuthorizationServer和ResourceServer分开配置 2016.05.29: Token获取采用Http Ba ...
随机推荐
- Spring Boot的一个测试用例
package tk.mybatis.springboot.mapper; import org.junit.Assert; import org.junit.Test; import org.jun ...
- [js - 算法可视化] 汉诺塔(Hanoi)演示程序
前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好. 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔. 演示地址:http://tut.ap ...
- ArrayList和LinkedList的各项操作性能比较
如果用java编写程序,我们通常存储易变的数据集合时用到的数据结构往往是ArrayList,不过,在JDK中还存在另一个结构--LinkedList,只不过我们通常不用,原因在于性能问题, ...
- java的访问控制(包、访问修饰符、修饰符)
一. java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...
- 原生javascript实现ajax,post参数
var json = { userid: userid, cid: cid, openid: openid, type: 1 }; // 原生ajax json = (function(obj){ / ...
- ceph之纠删码
转自:http://m.blog.csdn.net/blog/skdkjxy/45695355 一.概述 按照误码控制的不同功能,可分为检错码.纠错码和纠删码等. 检错码仅具备识别错码功能 而无纠正错 ...
- 简单的web三层架构系统【第四版】
上一次写了第三版, 因为之前无意之间看到一段视频,说是把系统中所有的SQL语句都做成存储过程.可以在很大程度上优化系统的SQL执行速度.所以百度了一下细节问题,之后我把所有的SQL语句,都做成了存储过 ...
- Python 3 学习笔记
教程地址: http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143161198 ...
- 五子棋Web版的开发(三)
最近在这个上面花费的时间不多,进展不大,而且遇到了一个问题好久也没有解决..我将struct2 改为Spring MVC.但是ziRUL的自动映射却无法起作用. 一直不知道为什么会出现这个问题.. ...
- Android应用开发提高篇(1)-----获取本地IP
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/21/2361802.html 一.概述 习惯了Linux下的网络编程,在还没用智能机之前就一直想 ...