基于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 ...
随机推荐
- 服务器是R710常见错误汇总:
报错: E1422 CPU 1 machine check error . power cycle AC 解决方案: 系统 BIOS 已报告机器检查错误.请断开系统的交流电源 10 秒,然后重新启动系 ...
- 转: linux文件链接(软链接和硬链接)
链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法. Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic l ...
- CCNA实验(7) -- NAT
1.静态NAT2.动态NAT3.复用内部全局地址的NAT(PAT) enableconf tno ip do loenable pass ciscoline con 0logg syncexec-t ...
- ajax异步通讯 遮罩滚动栏,防止并发及误操作
加入滚动栏的遮罩,滚动栏图片须要自己调整路径 function loading() { var divloading = "<div id=\"loadingdiv\&quo ...
- android播放html5视频,仅仅有声音没有图像视频
在AndroidManifest.xm中l增加 <activity .... android:hardwareAccelerated="true" />
- java中File类详解
构造函数 代码如下: public class FileDemo { public static void main(String[] args){ //构造函数File(St ...
- Unable to locate appropriate constructor on class异常
一般出现Unable to locate appropriate constructor on class这个异常,都是实体类的带参数的构造方法和使用查询语句出现偏差,两个地方的代码如下: 一般都是第 ...
- Hibernate学习之hql查询语句
* 页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接 结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...
- 第二天(CSS 选择器)
1.常用的CSS选择器 类型选择器: 例如: p { color : red ; } 后代选择器: 例如: h2 span { font-weight : bold ; ...
- Mysql开启远程
改表法: x:\>mysql -u root -pvmware mysql> use mysql;mysql> update User set Host = ‘%’ where Us ...