程序员必知:UsbKey开发

简介: 程序员必知:UsbKey开发

最近在做UsbKey的开发,所以进行来进行一个总结,希望能对大家有所帮助。

我开发的是飞天的ePass1000ND,对key的验证并未涉及证书,而是利用MD5算法来实现。

UsbKey的验证机制:

当利用密钥进行身份验证时,客户机首先向服务器发送登陆请求。服务器则通过用户名从数据库中取出相应用户的密钥(A)。当服务器收到客户登陆请求后,便向客户机发送一个随机字符串(B),该字符串最终送入客户机的usbkey中用于计算。与此同时,服务器则根据用户名取出对应的密钥并利用发送给客户机的随机字符串(即key的密钥+随机字符串),在服务器上用加密引擎进行运算,得到运算结果(C)。客户机将此随机字符串(B)传入usbkey,usbkey则利用随机字符串(B)与内置在其中的密钥文件(a)通过硬件加密引擎进行运算,也得到一个运算结果(c),客户机再将此结果(c)直接在网络中发送给服务器。服务器比较两个运算结果C和c是否相同便可确定用户的合法性。密钥是存在于usbkey中,并且整个运算过程也是在usbkey中完成的。

在UsbKey中的到随机数的函数HashToken()是基于验证PIN码的,也就是说只有在验证PIN码正确后,这个函数才能进行调用。发现这一点的原因是我们的客户希望能尽量简便的去使用key,客户希望插上key后就能登陆系统。安全性当然是不高的,但这是客户的要求,所以风险自然由他们承担。我的实现方法就是插入key后点击登陆按钮即可。

下面是我开发的代码,用的全是C#(不容易啊,飞天给的例子基本都是vbscript的),我把常用的几个key的函数都封装起来了,在使用的时候调用即可

1using System;

2using System.Data;

3using System.Configuration;

4using System.Data.OracleClient;

5using FT_ND_FULLLib; //添加UsbKey类库的引用

6

7namespace Web.Public

8{

9 /**////

10 /// BS_UsbKey 的摘要说明。

11 ///

12 public class BS_UsbKey

13 {

14

15

16 public bool UsbKeyPIN_IsCorrect(string strInputPIN)//验证用户输入的PIN码是否正确

17 {

18 //示例化一个key对象

19 ePsM8FullClass ePass;

20

21 ePass = new ePsM8FullClass();

22

23 //读取key的版本号

24 ePass.GetLibVersion();

25

26 try

27 {

28 ePass.OpenDevice(1,"");//打开设备,对key的所以操作都是基于这个函数的

29

30 ePass.VerifyPIN(0,strInputPIN);//验证PIN码的函数

31 }

32 catch

33 {

34 ePass.CloseDevice();//关闭设备

35 return false;

36 }//代码效果参考:http://www.ezhiqi.com/zx/art_5648.html

37

38 ePass.CloseDevice();

39

40 return true;

41 }

42

43 public string GetRandom()//生成用于验证的随机数

44 {

45 string strRandData;

46 Random randomGenerator;

47

48 randomGenerator = new Random(DateTime.Now.Millisecond);

49 strRandData = "";

50

51 for(int i=0; i[/span>19; i++)

52 {

53 strRandData += Convert.ToChar(randomGenerator.Next(97,122));

54 }

55

56 return strRandData;

57 }//代码效果参考:http://www.ezhiqi.com/zx/art_6878.html

58

59 public string GetClientDigest(string strRandData)

60 {

61<span style="

相关文章
|
11月前
|
设计模式 自然语言处理 程序员
普通程序员要成为高级程序员,一定要学会重构
普通程序员要成为高级程序员,一定要学会重构
52 0
|
5月前
|
网络协议 Java 程序员
一文聊聊程序员的痛楚与磨难选择
对于还没有完整读过源码的小伙伴,本文建议的源码阅读方式,不妨尝试下。从你准备开始阅读源码,你会发现,要做的事情太多了,不过一步一个脚印,你会发现,付出是值得的。
一文聊聊程序员的痛楚与磨难选择
|
NoSQL 前端开发 关系型数据库
程序员2
程序员2
97 0
|
程序员 开发者
作为一个程序员的阴暗面
  一个全栈开发者的自白   迈克尔-米勒 6分钟阅读   你刚从8小时的工作中回家。你一整天都在接听电话和发送电子邮件,试图找到新的线索,以便你能在这个月赚到佣金。回到家,和家人一起在你辛辛苦苦维持的两居室公寓里放松一下,不过是在第二天的工作开始之前的一个单纯的假期。   你和你的伴侣赚的钱只够你们两个人每月支付所有的账单并让你们的家人吃饱。当你坐在餐桌前时,你感觉到你的手机在震动,因为有一条新的信息传来......   这是你的工作。   信息中写道:"明天不要再来了,你已经被替换了"。   当你坐在那里盯着墙壁,无法理解你刚刚读到的内容时,思想开始在你的脑海中飞驰。我们这个月
169 0
|
架构师 Java 程序员
程序员普遍都有工伤!
作为加班一族、通宵一族、买房一族...程序员的压力可以说非常大了,然而这就出现了一个恶性循环,项目上线要加班,不上线也加班,加班烧脑容易饿,公司福利好,管三餐,待在公司就像家,bug改不完不回家.
939 0
|
缓存 Java 程序员
具有1-10年开发经验的程序员应该如何提升自己
工作1-5年开发经验,当你们提出涨工资的时候,或者要offer的时候底气怎么样,是不是底气十足,不给涨工资就辞职,是不是有自信提出来主管、或者是项目经理都能同意,他们相当设法把你留住。
1497 0
|
Web App开发 JavaScript 物联网
程序员被聘用的13个开发技能
1.JavaScript 这些日子,开发人员掌握JavaScript总不会错。JavaScript能力是目前为止被高层执行人员和招聘人员誉为最频繁的追捧技能。
1500 0
|
程序员
为什么要选择做一名程序员?
从这篇文章开始准备做一个大学生学编程系列文章,主要帮助一些还在编程路上徘徊的小伙伴,作为一个过来人的身份总结一些编程经验以及心得,在自学的过程中走了很多的弯路,在此通过这个专栏分享给需要编程的小伙伴。
2064 0
|
架构师 Java 程序员
程序员到架构师需要的编程基础
程序员到架构师的进阶之路是非常艰辛和漫长的,不但需要掌握很多高级的知识技能,还需要有过硬的基础知识。《Java架构师指南》就是这样一本指导小白到架构师进阶的书。本文摘取了这本书中的第一章节,主要介绍Java程序员走向架构师的基础知识,还有开发环境的搭建。
3142 0
下一篇
无影云桌面