基于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验证方式)的更多相关文章

  1. 基于RSA的前后端登陆密码加密JAVA实现(转)

    RSA加密算法简介 SA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难,RSA算法愈 ...

  2. 【转】基于RSA算法实现软件注册码原理初讨

    1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...

  3. C#基于RSA加密算法实现软件注册实战演练

    一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...

  4. 一个基于RSA算法的Java数字签名例子

    原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...

  5. 【转载】非对称加密过程详解(基于RSA非对称加密算法实现)

    1.非对称加密过程:         假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...

  6. 【编程开发】非对称加密过程详解(基于RSA非对称加密算法实现)

    1.非对称加密过程:         假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...

  7. Struts(二十四):短路验证&重写实现转换验证失败时短路&非字段验证

    短路验证: 若对一个字段使用多个验证器,默认情况下会执行所有的验证.若希望前面的验证器没有通过,后面的验证器就不再执行,可以使用短路验证. 1.如下拦截器,如果输入字符串,提交表单后,默认是会出现三个 ...

  8. Struts(二十三):使用声名式验证

    Struts2工程中的验证分为两种: 1.基于XWork Validation Framework的声明式验证:Struts2提供了一些基于XWork Validation Framework的内建验 ...

  9. [更新]一份包含: 采用RSA JWT(Json Web Token, RSA加密)的OAUTH2.0,HTTP BASIC,本地数据库验证,Windows域验证,单点登录的Spring Security配置文件

    没有任何注释,表怪我(¬_¬) 更新: 2016.05.29: 将AuthorizationServer和ResourceServer分开配置 2016.05.29: Token获取采用Http Ba ...

随机推荐

  1. oracle查询字符集语句

      (1)查看字符集(三条都是等价的) 复制代码 代码如下: select * from v$nls_parameters  where parameter='NLS_CHARACTERSET'sel ...

  2. NAND Flash中常用的纠错方式(ECC算法)

    Hanming,RS,BCH —— NAND Flash中常用的纠错方式 因为闪存中会有出错的可能,如果没有使用ECC模块,读出的数据和写入的数据会有不匹配的可能,也许一个文件中只有一两个bit不匹配 ...

  3. Optipng—PNG的优化图像工具初探

    PNG 即 Portable Network Graphic 的简称,PNG 图像是一种无损压缩图像文件格式.因为网络传输的需要,我们总是希望 PNG 图像的容量能够小些.小些.再小些.要优化 PNG ...

  4. C++中delete 和delete[]的区别

    c++告诉我们在回收new分配的单个对象的内存空间的时候用delete,   回收new[ ]分配的一组对象的内存空间的时候用 delete[ ]; #include <iostream> ...

  5. sql 分割字符串 存储过程

    默认是用 , 分割,如有需要可以自己更改 我写的是 循环插入数据 存储过程,也可以自己改成 方法使用 存储过程: ),@jrid int) as begin declare @location int ...

  6. 传统web和mvc的区别

  7. C#获取时间的函数

    //获取日期+时间DateTime.Now.ToString();            // 2012-9-4 20:02:10DateTime.Now.ToLocalTime().ToString ...

  8. objective-C学习笔记(七) 字符串处理

    字符串NSString NSString 是一个Unicode编码,16位字符的字符序列. NSString 是一个类,拷贝时需要注意. 初始化方法:字面量初始化.初始化器.工厂方法. NSStrin ...

  9. Objective-c 深浅复制

    深浅复制的定义: 浅复制:在复制时,对于被复制对象的每一层都是指针复制. 深复制:在复制时,对于被复制的对象至少有一层是对象复制. 完全复制:在复制时,对于被复制对象的每一层都是完全复制. retai ...

  10. loaded some nib but the view outlet was not set

    链接地址:http://www.cnblogs.com/TivonStone/archive/2012/04/20/2460116.html 当使用 initWithNibName 函数, 并使用 由 ...