基于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. HDU 3507 Print Article(CDQ分治+分治DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3507 [题目大意] 将长度为n的数列分段,最小化每段和的平方和. [题解] 根据题目很容易得到dp ...

  2. 关于tableView的简单实例

    关于tableCell选中颜色 //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 cell.selectionSty ...

  3. 第七届河南省赛B.海岛争霸(并差集)

    B.海岛争霸 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 130  Solved: 48 [Submit][Status][Web Board] D ...

  4. UIView 中bounds和frame的差别

    搞iOS开发的童鞋基本都会用过UIView,那他的bounds和frame两个属性也不会陌生,那这两个有什么实质性的区别呢? 先看到下面的代码你肯定就明白了一些: -(CGRect)frame{    ...

  5. js秒数转换时分秒方法

    今天写一个东西的时候 发现给出的是秒数.实在找不到直接的工具去转换. 就去网上找了个转换方法(有现成的就不写了,以后再简化下代码). function formatSeconds(value) { v ...

  6. BZOJ 3224: Tyvj 1728 普通平衡树(BST)

    treap,算是模板题了...我中间还一次交错题... -------------------------------------------------------------------- #in ...

  7. IOS 表视图(UITableVIew)的使用方法(6)表视图的编辑功能(新增Add)

    表视图的新增功能和删除功能虽然目的不同,但是工作流程是相似的 下面列出在处理新增的回调函数时,与删除所不同的逻辑部分代码. 显示下过如下: #pragma mark #pragma mark Tabl ...

  8. IMP-00008: unrecognized statement in the export file: string的问题分析

    分类: Linux 上周需要将oracle10g中的某一个用户下的对象导入到oracle11g中去.用exp在10g的数据库服务器上导出的dump文件,再用imp在11g的数据库服务器上将dump文件 ...

  9. phome_ecms_news 数据表字段解释(新闻系统模型-主表)

    http://www.phome.net/doc/manual/extend/html/dbdoc/index.html 字段名 类型 解释 附加说明 id int(11) 信息ID   classi ...

  10. BZOJ 1002 轮状病毒 (基尔霍夫矩阵)

    题解:http://vfleaking.blog.163.com/blog/static/17480763420119685112649/ #include <iostream> #inc ...