一、前言

在最近接手的项目中,小编接手了吉林省的一个税务相关的项目,既然是给国家政府机关做项目,那么这个项目的安全性指数就比较高。所以从登录的时候就对这个做了限制——使用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);} #endregionprivate 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:08try{//1. 检查是否安装ukey驱动accUkey.CheckKey();}catch (Exception){return"请安装USBKEY驱动";}//2. 判断是否插入ukeyint 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 "查询结果不存在" ;}#endregionnsrsbh = 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的判断操作相关推荐

  1. java虚拟机如何判断两个类相同_你有没有想过: Java 虚拟机是如何判断两个对象是否相同的?判断的流程是什么?...

    在Java程序运行时,会产生那么多的对象,那 Java 虚拟机是如何判断两个对象是否相同的呢?判断的流程是什么? 参考解答: Java 虚拟机会先判断两个对象的hashCode是否相同,如果hashC ...

  2. 【Java】奇偶数判断

    [Java]奇偶数判断 需求 编写方法,判断一个数是奇数还是偶数 代码 package com.cxl.demo27;import java.util.Scanner;//奇偶数判断 public c ...

  3. java,循环和判断,黑马程序员作业

    一.if判断语句作业 ## 题目1 李雷想买一个价值7988元的新手机,她的旧手机在二手市场能卖1500元,而手机专卖店推出以旧换新的优惠,把她的旧手机交给店家,新手机就能够打8折优惠.为了更省钱,李 ...

  4. java判断是否安装了pdf_java判断上传文件是否为pdf java图像上传中如何判断是否是jpg格式...

    java怎么判断有没有上传文件 Java平台如何判断用户上传的文件是否是图片不要辜负了自己受过的苦难,这样善良又努力的一个你,一定会得到曾梦寐以分享的所有美好. if(typeof FileReade ...

  5. java 布尔值的判断

    java 布尔值的判断 不要用 if(flag == true)这种写法 容易写成 if(flag = true), 直接if(flag)

  6. JAVA水仙花数与判断是否为水仙花数

    问题描述 水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身 *** 水仙花 DaffodilNum* 水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身* public ...

  7. java 滚动条的事件_[Java教程]jquery如何判断滚动条滚到页面底部并执行事件

    [Java教程]jquery如何判断滚动条滚到页面底部并执行事件 0 2016-04-27 10:00:13 本文章向码农介绍jquery如何判断滚动条滚到页面底部并执行事件.首先理解三个dom元素, ...

  8. Java(79):Character.isDigit() 判断输入的数据是否大于等于零整数

    /*** @param str* @function 判断输入的数据是否是大于等于零的整数*/public static boolean isNumeric(String str) {for (int ...

  9. java如何通过if判断字符_java如何用if判断字符串是否相等

    java如何用if判断字符串是否相等 发布时间:2020-06-16 09:30:54 来源:亿速云 阅读:58 作者:Leah java如何用if判断字符串是否相等?针对这个问题,今天小编总结了这篇 ...

  10. java中判断复选框是否被选中_[Java教程]jquery如何判断checkbox(复选框)是否被选中...

    [Java教程]jquery如何判断checkbox(复选框)是否被选中 0 2013-08-15 18:00:14 谁都知道 在html 如果一个复选框被选中 是 checked="che ...

最新文章

  1. 图灵今年的生日礼物,是新版50英镑纸币
  2. java个人学习笔记:javaBean
  3. 30年来我只坚持三件事
  4. Javascript中“==”与“===”的区别
  5. 你能体会那种写 Python 时不用 import 的幸福吗?
  6. python输出结果空格分割_用Python编写固定宽度,以空格分隔的CSV输出
  7. python人工智能_人工智能福利丨Python核心语法实战
  8. 数据库JDBCUtil 工具类 增加连接池操作
  9. 学生成绩管理系统V3.0链表版
  10. Mysql Fabric实现学习笔记
  11. Protel99SE WIN10系统下无法添加封装库的解决方法
  12. 微信公众号中视频下载的2种方法
  13. ElasticSearch学习总结2(基础查询)
  14. gis与一般计算机应用系统有哪些异同,gis概论各章练习题..doc
  15. 富有哲理的10则故事(必读经典)
  16. 你的另一半眼泪流给谁
  17. 宽带IPTV单线复用
  18. java生成随机的26位英文字母
  19. 大促场景系统稳定性保障实践经验总结
  20. JTAG的TAP状态机介绍

热门文章

  1. 人情事故:做了3年销售一事无成, 转行后成功拿到第一个月薪9K..
  2. Unity3d摄像机Camera参数介绍
  3. 在线C语言编译器/解释器
  4. 火遍童年的FC游戏是使用什么语言编写的
  5. 一篇文章讲透yolo v1-v7
  6. Youtube上面的Red5 官方视频下载教程,带字幕【亲测成功】
  7. 【HBuilder运行到MuMu模拟器无法安装基座的问题,一直卡在安装基座...】
  8. c# word 操作
  9. OCR论文综述(含文字识别、文本检测、端到端和数据集合)
  10. 电子邮箱如何注册短靓号?邮箱靓号如何申请