基于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即为所需要验证的用户.

1  RADIUSClient r = null;
2  int nResult = 0;  r = new RADIUSClient("ip", port , "secret" , radius_soctet_timeout);
3  r.setDebug(true);
4  AttributeList aList = new AttributeList();
5  aList.addAttribute(Attribute.NAS_Port, 1);
6  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带入下一次验证,用来验证识别).

 1  switch (nResult) {
 2                 case 3:
 3                     try{
 4                        AttributeList response = r.getAttributes();
 5                        AttributeList state = response.getAttributeList(Attribute.State);
 6                     }
 7                     catch(Exception e){
 8
 9                     }
10
11                     break;
12                 case 0:
13
14                     break;
15                 case 11:
16                     AttributeList response = r.getAttributes();
17                     AttributeList state = response.getAttributeList(Attribute.State);
18                     r.reset();
19                     System.out.println(":");
20                     Scanner sa = new Scanner(System.in);
21                     String sl = sa.next();
22                     String mima = sl + "";
23                     AttributeList attList = new AttributeList();
24                     attList.addAttribute(Attribute.NAS_Port, 1);
25                     attList.mergeAttributes(state);
26                     nResult = r.authenticate(username, mima, attList);
27                     System.out.println(r.getPacketType());
28                     System.out.println("r.getErrorString():" + r.getErrorString());
29                     System.out.println("Second nResult:" + nResult);
30                     if(nResult == 11){
31                         AttributeList rresponse = r.getAttributes();
32                       AttributeList sstate = rresponse.getAttributeList(Attribute.State);
33                       r.reset();
34                       System.out.println("re new pins");
35                       Scanner ssa = new Scanner(System.in);
36                       String ssl = ssa.next();
37                       String renewpin = ssl + "";
38                       System.out.println(renewpin);
39                       AttributeList aattList = new AttributeList();
40                       aattList.addAttribute(Attribute.NAS_Port, 1);
41                       aattList.mergeAttributes(sstate);
42                       nResult = r.authenticate(username, renewpin, aattList);
43                       System.out.println(r.getPacketType());
44                       System.out.println("r.getErrorString():" + r.getErrorString());
4546                       if (nResult == 11){
47                         AttributeList rrresponse = r.getAttributes();
48                         AttributeList ssstate = rrresponse.getAttributeList(Attribute.State);
49                         r.reset();
50                         System.out.println("posscode");
51                         Scanner ressa = new Scanner(System.in);
52                         String ressl = ressa.next();
53                         String passcode = ressl + "";
54                         AttributeList reaattList = new AttributeList();
55                         reaattList.addAttribute(Attribute.NAS_Port, 1);
56                         nResult = r.authenticate(username, passcode, reaattList);
57                         System.out.println(r.getPacketType());
58                         System.out.println("r.getErrorString():" + r.getErrorString());
59                         System.out.println("nResult:" + nResult);
60                           if (nResult == 2){
61                               return "AUTH SUCCESS";
62                           }
63                       }
64                     }
65                     if (nResult == 2){
66                         return "AUTH SUCCESS";
67                     }
68                 case 2:
69
70                     return "AUTH SUCCESS";
71                 default:
72
73                     break;
74             }
75             return "AUTH FAILURE";
时间: 2024-11-03 03:38:51

基于RSA securID的Radius二次验证java实现(PAP验证方式)的相关文章

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

1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式还是一种保护软件系统本身的一种有效的手段. 通常而言,注册码授权方式有以下几种方式: u  安装序列号方式:这是最为常用的方式,Mircosoft提供的产品(例如:Windows系列产品.Office系列产品等等)都是采用这种方式.通过一种复杂的算法生成安装序列号,在安装过程中,安装程序对用户输入的

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

原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性,利用消息摘要可以保证数据的完整性,但是还有一点就是数据来源的不可否认性(也就是数据来自哪里接收者是清楚的,而且发送数据者不可抵赖). 有些方案曾经使用消息认证码(MAC)来保证数据来源于合法的发送着,但是利用消息认证码会带来一个问题,就是通讯双方必须事先约定两者之间的通讯用共享密码.在我们的互联网

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

一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和完善此系列课程! 今天给大家带来的分享课程是探索一下RSA加密算法在我们实际工作中的应用,了解RSA加密算法的特点和原理,并实战演练一下C#基于RSA加密算法如何实现软件注册功能. 1.1.本次分享课学完后我们要达到学习的目标和成果?1). RSA加密算法之RSA加密和解密(公钥加密.私钥解密)实战演练 .

图像处理之积分图应用四(基于局部均值的图像二值化算法)

图像处理之积分图应用四(基于局部均值的图像二值化算法) 基本原理 均值法,选择的阈值是局部范围内像素的灰度均值(gray mean),该方法的一个变种是用常量C减去均值Mean,然后根据均值实现如下操作: pixel = (pixel > (mean - c)) ? object : background 其中默认情况下参数C取值为0.object表示前景像素,background表示背景像素. 实现步骤 1. 彩色图像转灰度图像 2. 获取灰度图像的像素数据,预计算积分图 3. 根据输入的参数

基于Netty的聊天系统(二)协议定制----登录篇

上一篇文章我们讨论了聊天的基本流程,那么我们现在基于上一篇文章的流程开始定义协议,如果有朋友有更好的建议,可以在下边回复一起学习讨论,我们说登录分为两部分,第一部分为和服务器的连接阶段,第二部分为验证阶段,那么首先我们基于这2个部分来指定协议: 连接阶段: {"id":"xxxx","#":"conn","u":1[email protected]/ios,"v":100} id:客户端

非对称加密过程详解(基于RSA非对称加密算法实现)

1.非对称加密过程: 假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体过程如下: 说明: 国内目前使用双证书体系,即用户同时拥有签名证书.加密证书两张证书.签名证书是用户的身份认证,是和CA协商的结果,可用于对用户A的身份验证:加密证书是用来对信息进行加密,是用户和秘钥管理系统生成.我们在这里假设都适合CA进行交互. ①:此过程是生成公钥私钥的过程,我们这里基于RSA算法实现,RSA

十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

十三种基于直方图的图像全局二值化算法原理.实现.代码及效果(转) http://www.cnblogs.com/carekee/articles/3643394.html 图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果. 在这些庞大的分

基于RSA的加密/解密示例C#代码

在C#程序中,大家可能比较熟悉的方式是md5加密解密方式,对RSA可能并不是很熟悉, 下面就说一下RSA加密和解密的算法: using System;using System.Security.Cryptography;using System.Text;class RSACSPSample{    static void Main()    {        try        {            string str_Plain_Text = "How are you?How are

基于PHP实战ThinkSNS V3二次开发

基于PHP实战ThinkSNS V3二次开发(系统架构.网站定制化开发.问答系统开发) 课程分类:PHP 适合人群:中级 课时数量:25课时 服务类型:C类(普通服务类课程) 用到技术:PHP.ThinkSNS V3二次开发 涉及项目:ThinkSNS V3二次开发.问答系统 咨询QQ:1840215592 课程内容简介: 由于ThinkSNS产品提供了完整的微博及系统功能,并提供了非常友好的二次开发规范.越多越多的企业和开发人员选择使用ThinkSNS构建成熟的SNS企业网站和商业项目.本课程