【Ukey】C#或者Java对Ukey的判断操作
来源:互联网 发布:共识网 知乎 编辑:程序博客网 时间:2024/06/06 03:46
一、前言
在最近接手的项目中,小编接手了吉林省的一个税务相关的项目,既然是给国家政府机关做项目,那么这个项目的安全性指数就比较高。所以从登录的时候就对这个做了限制——使用Ukey来进行检测。下面小编向大家介绍一下Ukey是什么?Ukey怎么使用?
二、什么是Ukey?
上图就是Ukey,对你没有看错,他张的确实很像一个U盘,但是他又不说U盘。
UKey是一种通过USB (通用串行总线接口)直接与计算机相连、具有密码验证功能、可靠高速的小型存储设备。ukey 是对现行的网络安全体系是一个极为有力的补充,通过中国信息安全测评认证中心认证的网络安全产品.基于可信计算基及智能卡技术把易用性,便携性和最高级别的安全性带给了使用Microsoft IE或Netscape Navigator进行Web访问,在线交易(购物,付款),收发电子邮件,在线聊天交友及表单签名,文件数字签名等操作的用户,保证用户在ukey下的操作不可篡改,抵赖。ukey最大的特点就是安全性高,技术规范一致性强,操作系统兼容性好,携带使用灵活。——百度百科
总结一下呢,Ukey就是一个钥匙,当我们要登录的时候,如果我们输入正确了用户名和密码,但是没有插入配置好的Ukey,就依旧是不能登录。
Ukey的身份验证原理:借鉴andycode
可以应用usbkey进行冲击响应身份认证,替换掉传统的用户名和密码方式,使登录更加安全。其原理如下图所示:
在整个认证过程中,采用冲击响应的认证方式。当需要在网络上验证用户身份时,先由客户端向服务器发出一个验证请求。服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为冲击)。客户端将收到的随机数提供给,由使用该随机数与存储在中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。
三、Ukey怎么使用?
在使用Ukey的之前呢,就需要对Ukey进行配置,要安装Ukey的驱动才可以显示出Ukey的配置界面。小编使用的是海泰方圆的Ukey,由北京海泰方圆科技有限公司制作。
安装好驱动后,当我们插上Ukey就可以显示出来配置的界面:
我们需要配置的有证书管理的信息。
安装完了,我们还需要对ukey进行操作,就需要我们安装“应用安全支撑平台安全客户端控件.exe”,就可以在C盘的windows文件中添加一个Cryp_Ctl.dll的ocx控件。如果是C#开发的话,就需要把这个控件引用进来,当我们判断的时候需要引入这个控件。如图:
操作的代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace ukey{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } #region 验证Ukey的信息-王雷-2017年4月17日16:40:25 /// <summary> /// 验证Ukey的信息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { accUkeyOperator ukeyOpe = new accUkeyOperator(); string a = ukeyOpe.TestingUKey(accUkey); //判断返回的ukey信息 if (ukeyOpe.nsrsbh!="") { txtShow.Text = ukeyOpe.nsrsbh; } MessageBox.Show(a); } #endregion private void timer1_Tick(object sender, EventArgs e) { accUkeyOperator ukeyOpe = new accUkeyOperator(); string a = ukeyOpe.TestingUKey(accUkey); //判断返回的ukey信息 if (ukeyOpe.nsrsbh != "") { txtShow.Text = ukeyOpe.nsrsbh; } MessageBox.Show(a); } }}
判断Ukey的类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using AxCryp_Ctl;using System.Windows.Forms;namespace ukey{ public class accUkeyOperator { private AxCryptCtl _accUkey; public AxCryptCtl accUkey { get { return _accUkey; } set { _accUkey = value; } } public string nsrsbh; #region 检测ukey的操作-王雷-2017年4月17日16:40:08 /// <summary> /// 检测ukey的操作-王雷-2017年4月17日16:40:08 /// </summary> /// <param name="accUkey"></param> public string TestingUKey(AxCryptCtl accUkey) { nsrsbh = ""; #region 检测ukey的操作-王雷-2017年4月17日16:40:08 try { //1. 检查是否安装ukey驱动 accUkey.CheckKey(); } catch (Exception) { return"请安装USBKEY驱动"; } //2. 判断是否插入ukey int ErrCode = accUkey.ErrCode; if (ErrCode != 0) { return accUkey.ErrMsg ; } //3.打开密码设备(打开USBKEY)。 accUkey.OpenDevice(); if (accUkey.ErrCode != 0) { return accUkey.ErrMsg ; } //4.取证书信息(默认使用16进制表示;纳税人识别号 71;) string signCertstr = ""; accUkey.GetCertInfo(signCertstr, 71); if (accUkey.ErrCode != 0) { return accUkey.ErrMsg ; } //5.返回结果判断 if (accUkey.strResult == null || accUkey.strResult == "") { //获取信息失败 return "查询结果不存在" ; } #endregion nsrsbh = accUkey.strResult; return accUkey.ErrMsg ; } #endregion }}
对于web开发:
<object classid="clsid:3C474273-7F8B-4690-8C34-855C4528658D" id="CryTool" border="0" width="14" height="14" style="visibility: none; display: none"> </object>function checkUkey(){ try { CryTool.CheckKey(); } catch (e) { $("#errMsg").css({color:"red"}); $("#errMsg").html("(请安装USBKEY驱动)"); return;// Dialog.alert(" 错误信息:" + "请安装USBKEY驱动"); } if (CryTool.ErrCode != 0) { $("#errMsg").css({color:"red"}); $("#errMsg").html("(请插入UKEY)");// Dialog.alert(" 错误信息:" + CryTool.ErrMsg); }else{ CryTool.OpenDevice(); if (CryTool.ErrCode != 0) { $("#errMsg").css({color:"red"}); $("#errMsg").html(CryTool.ErrMsg); }else{ signCertstr = ""; CryTool.GetCertInfo(signCertstr, 71); if (CryTool.ErrCode != 0) {// Dialog.alert(" 错误信息:" + CryTool.ErrMsg); $("#errMsg").css({color:"red"}); $("#errMsg").html(CryTool.ErrMsg); } else {// alert(signCertstr); if(CryTool.strResult!=null&&CryTool.strResult!=undefined&&CryTool.strResult!=""){ var nsrsbhTemp = CryTool.strResult; nsrsbh = nsrsbhTemp; var url = "inspur.tax.login.Login.cmd?method=checkSfGyUkery"; var params = "nsrsbh="+nsrsbhTemp; var service = new WebService(url); service.showLoading = false; service.run(params); var flag = service.getText("flag"); if(flag!="0"){ $("input[name=czryDm]").attr("readonly","readonly"); $("input[name=czryDm]").val(nsrsbhTemp);// nsrsbh = nsrsbhTemp; }else{ $("input[name=czryDm]").removeAttr("readonly"); } $("#errMsg").css({color:"blue"}); $("#errMsg").html("(UKEY识别成功)"); }else{ $("input[name=czryDm]").removeAttr("readonly"); nsrsbh = ""; } } } }}
四、小结
以前的安全意识基本就停留在账号密码上,其实账号密码不是很保险的,当硬件和软件相结合的时候就是我们安全性的保证。所以这种思考还是可以有的。
福利:关于Ukey的文档和源码
- 【Ukey】C#或者Java对Ukey的判断操作
- ukey的密码学原理
- CryptVerifySignature 用uKey和不用uKey的区别
- 【达达】当前ukey的资料
- tomcat ukey
- 基于数字证书的UKEY安全登录
- 基于UKey的安全网盘设计
- UKEY通信各个应用的流程介绍--生成RSA签名密钥对
- UKEY通信各个应用的流程介绍--导入RSA加密密钥对
- 实验_用Ukey(CSP)对文件加解密
- ukey虚拟通道
- 冲击/响应验证(UKEY)
- 用CSP枚举UKey
- UKEY通信CCID
- html身份认证Ukey
- ukey证书简介
- Windows7+IE8 无法使用网银Ukey的解决方法
- 在js中window.setInterval() 实现ukey的自动识别
- 接笔记一,涉及struts2登录的
- 4月份英语总结博客
- 一个小爬虫 从网页获取信息(图片下载)
- C++类之线程管理
- Mysterious Bacteria
- 【Ukey】C#或者Java对Ukey的判断操作
- 前缀中的周期---非优化KMP算法的运用
- JS解惑--闭包
- 自考之路
- br一点点改动
- 解决my eclipse 中server报错
- 博客搬家了
- Codeforces798A Mike and palindrome
- HUST 1563