程序员必知: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="

相关文章
|
机器学习/深度学习 前端开发 Oracle
程序员的那些事
本文章介绍了程序员是做什么的要学什么
299 0
程序员的那些事
|
11月前
|
程序员 Go 定位技术
程序员如何走向世界!
程序员如何走向世界!
40 0
|
NoSQL 前端开发 关系型数据库
程序员3
程序员3
113 0
|
Java 程序员 C++
33岁程序员的年中总结
33岁程序员的年中总结
227 0
|
程序员 C++
别人的1024程序员节VS你的1024程序员节
别人的1024程序员节VS你的1024程序员节
299 0
|
算法 程序员
作为一个程序员,如何保持优秀
作为一个程序员,如何保持优秀
119 0
|
前端开发 程序员
如何成为一个牛逼的程序员
“成为一个杰出的程序员!”,每个程序员都是这么想的,虽然嘴上不说!这是一个人人自称“屌丝”,骨子里却都认为自己是“高富帅”(或者认为自己终究会成为高富帅)的年代! 大部分时候,我们一直在努力成为一名优秀的程序员。
1201 1
|
程序员 开发者 iOS开发
30岁以上的程序员该如何自处?
程序员30岁以上,是可以继续技术生涯的. 我身边有很多邻近50+,还在做技术. 如果你喜欢做技术,又能扛得住环境的噪音, 年龄其实不是问题. 遗憾的是,其实很多人并不喜欢软件开发这条技术路, 心里早已存在干几年就要转型的念头, 于是总是容易被外界喧嚣推动的左右摇摆.
1264 0
|
程序员
程序员如何保护自己的那点东西
  程序员工作几年之后,总会有点自己的东西,比如类库、自定义控件、框架、平台,或者是某种编程思想。那么如何保护自己多年来琢磨出来的东东呢?   答案就是知识产权!   知识产权包含很多方面,版权和专利是其中比较重要的两个部分。
1166 0
|
架构师 Java 程序员
我女朋友是个程序员
呃。。。开新坑了。神秘的程序员和他/她的家属们的日常系列。这个系列主要是一些比较轻松的中短篇幅故事。 说到这里,也给大家推荐一个架构交流学习群:614478470,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。
950 0