最近刚开始使用USBKey进行身份验证,结合ePass的开发文档,终于知道了从USBKey中读取用户的身份信息,这里贴出飞思Coffice办公系统中用来进行验证的代码,给准备使用USBKey进行身份验证的朋友一点帮助。
1
<%
@ Page language="c#" Codebehind="Index.aspx.cs" AutoEventWireup="false" Inherits="UDS.SubModule.Login.index"
%>
2 < HTML >
3 < HEAD >
4 < title > Coffice 系统 </ title >
5 < meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" >
6 < style type ="text/css" >
7 .Vibox {}{ BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: 0px; WIDTH: 150px; COLOR: #003399; PADDING-TOP: 0px; BORDER-BOTTOM: 0px; FONT-STYLE: normal; FONT-FAMILY: "Arial", "Helvetica", "sans-serif"; HEIGHT: 18px }
8 .Vibutton {}{ BORDER-RIGHT: #006699 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #006699 1px solid; PADDING-LEFT: 1px; FONT-SIZE: 12px; PADDING-BOTTOM: 1px; MARGIN: 1px; BORDER-LEFT: #006699 1px solid; WIDTH: 60px; COLOR: #006699; PADDING-TOP: 1px; BORDER-BOTTOM: #006699 1px solid; FONT-FAMILY: "宋体"; HEIGHT: 18px; BACKGROUND-COLOR: #ffffff }
9 .Vitext {}{ FONT-SIZE: 12px; COLOR: white; FONT-FAMILY: "宋体" }
10 .Mybuttona {}{ background-image:url(../../Images/denglu.jpg); CURSOR: hand;}
11 .Mybuttonb {}{ background-image:url(../../Images/quxiao.jpg); CURSOR: hand;border: 0px solid; }
12 </ style >
13 </ HEAD >
14 < BODY bgcolor ="#353467" bgcolor = leftMargin="0" topMargin ="0" onload ='javascript: if(this.document.all.txtUsername.value =="") this.document.all.txtUsername.focus();else this.document.all.txtPassword.focus();' >
15 < span id ="obj" ></ span >
16 <!-- 判断用户是否选择使用USBKey -->
17 < script language ="javascript" >
18 function needUsbKey(){
19 if (document.index.cb_isNeedUsbKey.checked==true)
20 {
21 obj.innerHTML="<OBJECT id='ePass' style='LEFT: 0px; TOP: 0px' height='0' width='0' classid='clsid:E740C5DF-3454-46A7-80EC-364D1ADB6CF0' name='ePass' VIEWASTEXT></OBJECT>";
22 }
23 }
24 </ script >
25 < script language ="VBScript" >
26
27 Dim FirstDigest
28 Dim Digest
29 Digest= "01234567890123456"
30 dim bErr
31
32 sub ShowErr(Msg)
33 bErr = true
34 ErrMsg.innerHTML = "<input type='hidden' name='ErrMsg' Value='" & Msg & "'>"
35 End Sub
36
37 function Validate()
38 Digest = "01234567890123456"
39 On Error Resume Next
40 bErr = false
41 ePass.GetLibVersion
42
43 If Err.number = &H1B6 Then
44
45 ShowErr "Load ePass 1000 Safe Active Control"
46 Validate = false
47 Exit function
48 Else
49
50 ePass.OpenDevice 1, ""
51
52 If Err then
53 ShowErr "请勾选使用框,并插入USB_Key!"
54 Validate = false
55 ePass.CloseDevice
56 Exit function
57 End if
58
59 'ePass.ResetSecurityState 0
60 dim results
61 results = "01234567890123456"
62 results = ePass.GetStrProperty(7, 0, 0)
63
64 If Err Then
65 ShowErr "Verify User PIN Failure!!!"
66 Validate = false
67 ePass.CloseDevice
68 Exit function
69 End If
70
71
72 If Not bErr Then
73 ePass.ChangeDir &H300, 0, "ASP_DEMO"
74 If Err then
75 ShowErr "Change to demo directory"
76 Validate = false
77 ePass.CloseDevice
78 Exit function
79 End If
80 End If
81
82
83 'Open the first key file.
84 If Not bErr Then
85 ePass.OpenFile 0, 1
86 If Err Then
87 ShowErr "Open first KEY-file"
88 Validate = false
89 ePass.CloseDevice
90 Exit function
91 End If
92
93 End If
94
95 'Do HASH-MD5-HMAC compute.
96 If Not bErr Then
97 Digest = ePass.HashToken (1, 2,"<%=RandData%>")
98 If Err Then
99 ShowErr "HashToken compute"
100 Validate = false
101 ePass.CloseDevice
102 Exit function
103 End If
104 DigestID.innerHTML = "<input type='hidden' name='Digest' Value='" & Digest & "'>"
105 snID.innerHTML = "<input type='hidden' name='SN_SERAL' Value='" & results & "'>"
106 End If
107 End If
108
109 ePass.CloseDevice
110
111 End function
112 </ script >
113
114 < form id ="index" method ="post" runat ="server" onsubmit ="Validate()" >
115 < span id ="DigestID" ></ span >
116 < span id ="snID" ></ span >
117 < span id ="ErrMsg" ></ span >
118 < table bgcolor ="#353467" cellSpacing ="0" cellPadding ="0" width ="100%" height ="100%" border ="0" >
119 < tr >< td width ="443" ></ td >
120 < td width ="357" align ="center" valign ="top" >
121 < img border ="0" src ="../../Images/welcome.gif" width ="224" height ="117" >
122 用户名: < asp:textbox id ="txtUsername" runat ="server" CssClass ="Vibox" ></ asp:textbox >
123 < asp:requiredfieldvalidator id ="rfvUsername" runat ="server" ControlToValidate ="txtUsername" ErrorMessage ="*" ></ asp:requiredfieldvalidator >
124 密 码: < asp:textbox id ="txtPassword" runat ="server" CssClass ="Vibox" TextMode ="Password" ></ asp:textbox >
125 < asp:requiredfieldvalidator id ="rfvPassword" runat ="server" ControlToValidate ="txtPassword" ErrorMessage ="*" ></ asp:requiredfieldvalidator >
126 < asp:button id ="btnSubmit" BorderWidth =0 BorderStyle =None Width ="88" Height ="43" runat ="server" CssClass ="Mybuttona" Text ="" ></ asp:button >
127 < input class ="Mybuttonb" style ="width=88px;height=43px" type ="reset" value ="" name ="Submit2" >< p >
128 < span class ="Vitext" >< asp:CheckBox id ="cb_isNeedUsbKey" runat ="server" Text ="使用USB_Key" Height ="10px" ></ asp:CheckBox >
129 < asp:label id ="lblErrorMessage" runat ="server" Visible ="False" ForeColor ="Red" Width ="128px" > 错误的用户名和口令 </ asp:label >
130 < p > 建议在1024*768分辨率下浏览 </ p ></ td ></ tr >
131 </ table >
132 </ form >
133 </ BODY >
134 </ HTML >
2 < HTML >
3 < HEAD >
4 < title > Coffice 系统 </ title >
5 < meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" >
6 < style type ="text/css" >
7 .Vibox {}{ BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: 0px; WIDTH: 150px; COLOR: #003399; PADDING-TOP: 0px; BORDER-BOTTOM: 0px; FONT-STYLE: normal; FONT-FAMILY: "Arial", "Helvetica", "sans-serif"; HEIGHT: 18px }
8 .Vibutton {}{ BORDER-RIGHT: #006699 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #006699 1px solid; PADDING-LEFT: 1px; FONT-SIZE: 12px; PADDING-BOTTOM: 1px; MARGIN: 1px; BORDER-LEFT: #006699 1px solid; WIDTH: 60px; COLOR: #006699; PADDING-TOP: 1px; BORDER-BOTTOM: #006699 1px solid; FONT-FAMILY: "宋体"; HEIGHT: 18px; BACKGROUND-COLOR: #ffffff }
9 .Vitext {}{ FONT-SIZE: 12px; COLOR: white; FONT-FAMILY: "宋体" }
10 .Mybuttona {}{ background-image:url(../../Images/denglu.jpg); CURSOR: hand;}
11 .Mybuttonb {}{ background-image:url(../../Images/quxiao.jpg); CURSOR: hand;border: 0px solid; }
12 </ style >
13 </ HEAD >
14 < BODY bgcolor ="#353467" bgcolor = leftMargin="0" topMargin ="0" onload ='javascript: if(this.document.all.txtUsername.value =="") this.document.all.txtUsername.focus();else this.document.all.txtPassword.focus();' >
15 < span id ="obj" ></ span >
16 <!-- 判断用户是否选择使用USBKey -->
17 < script language ="javascript" >
18 function needUsbKey(){
19 if (document.index.cb_isNeedUsbKey.checked==true)
20 {
21 obj.innerHTML="<OBJECT id='ePass' style='LEFT: 0px; TOP: 0px' height='0' width='0' classid='clsid:E740C5DF-3454-46A7-80EC-364D1ADB6CF0' name='ePass' VIEWASTEXT></OBJECT>";
22 }
23 }
24 </ script >
25 < script language ="VBScript" >
26
27 Dim FirstDigest
28 Dim Digest
29 Digest= "01234567890123456"
30 dim bErr
31
32 sub ShowErr(Msg)
33 bErr = true
34 ErrMsg.innerHTML = "<input type='hidden' name='ErrMsg' Value='" & Msg & "'>"
35 End Sub
36
37 function Validate()
38 Digest = "01234567890123456"
39 On Error Resume Next
40 bErr = false
41 ePass.GetLibVersion
42
43 If Err.number = &H1B6 Then
44
45 ShowErr "Load ePass 1000 Safe Active Control"
46 Validate = false
47 Exit function
48 Else
49
50 ePass.OpenDevice 1, ""
51
52 If Err then
53 ShowErr "请勾选使用框,并插入USB_Key!"
54 Validate = false
55 ePass.CloseDevice
56 Exit function
57 End if
58
59 'ePass.ResetSecurityState 0
60 dim results
61 results = "01234567890123456"
62 results = ePass.GetStrProperty(7, 0, 0)
63
64 If Err Then
65 ShowErr "Verify User PIN Failure!!!"
66 Validate = false
67 ePass.CloseDevice
68 Exit function
69 End If
70
71
72 If Not bErr Then
73 ePass.ChangeDir &H300, 0, "ASP_DEMO"
74 If Err then
75 ShowErr "Change to demo directory"
76 Validate = false
77 ePass.CloseDevice
78 Exit function
79 End If
80 End If
81
82
83 'Open the first key file.
84 If Not bErr Then
85 ePass.OpenFile 0, 1
86 If Err Then
87 ShowErr "Open first KEY-file"
88 Validate = false
89 ePass.CloseDevice
90 Exit function
91 End If
92
93 End If
94
95 'Do HASH-MD5-HMAC compute.
96 If Not bErr Then
97 Digest = ePass.HashToken (1, 2,"<%=RandData%>")
98 If Err Then
99 ShowErr "HashToken compute"
100 Validate = false
101 ePass.CloseDevice
102 Exit function
103 End If
104 DigestID.innerHTML = "<input type='hidden' name='Digest' Value='" & Digest & "'>"
105 snID.innerHTML = "<input type='hidden' name='SN_SERAL' Value='" & results & "'>"
106 End If
107 End If
108
109 ePass.CloseDevice
110
111 End function
112 </ script >
113
114 < form id ="index" method ="post" runat ="server" onsubmit ="Validate()" >
115 < span id ="DigestID" ></ span >
116 < span id ="snID" ></ span >
117 < span id ="ErrMsg" ></ span >
118 < table bgcolor ="#353467" cellSpacing ="0" cellPadding ="0" width ="100%" height ="100%" border ="0" >
119 < tr >< td width ="443" ></ td >
120 < td width ="357" align ="center" valign ="top" >
121 < img border ="0" src ="../../Images/welcome.gif" width ="224" height ="117" >
122 用户名: < asp:textbox id ="txtUsername" runat ="server" CssClass ="Vibox" ></ asp:textbox >
123 < asp:requiredfieldvalidator id ="rfvUsername" runat ="server" ControlToValidate ="txtUsername" ErrorMessage ="*" ></ asp:requiredfieldvalidator >
124 密 码: < asp:textbox id ="txtPassword" runat ="server" CssClass ="Vibox" TextMode ="Password" ></ asp:textbox >
125 < asp:requiredfieldvalidator id ="rfvPassword" runat ="server" ControlToValidate ="txtPassword" ErrorMessage ="*" ></ asp:requiredfieldvalidator >
126 < asp:button id ="btnSubmit" BorderWidth =0 BorderStyle =None Width ="88" Height ="43" runat ="server" CssClass ="Mybuttona" Text ="" ></ asp:button >
127 < input class ="Mybuttonb" style ="width=88px;height=43px" type ="reset" value ="" name ="Submit2" >< p >
128 < span class ="Vitext" >< asp:CheckBox id ="cb_isNeedUsbKey" runat ="server" Text ="使用USB_Key" Height ="10px" ></ asp:CheckBox >
129 < asp:label id ="lblErrorMessage" runat ="server" Visible ="False" ForeColor ="Red" Width ="128px" > 错误的用户名和口令 </ asp:label >
130 < p > 建议在1024*768分辨率下浏览 </ p ></ td ></ tr >
131 </ table >
132 </ form >
133 </ BODY >
134 </ HTML >
(——文中代码来自于飞思Coffice办公系统)