给准备用USBKey进行身份验证的朋友一点帮助

最近刚开始使用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(700)
 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 01
 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 (12,"<%=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                密&nbsp;码:<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>&nbsp;
127                <input class="Mybuttonb" style="width=88px;height=43px"  type="reset" value="" name="Submit2"><p>
128                &nbsp;<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办公系统)

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2005-09-29 14:43 TerryLee 阅读(4717) 评论(25)  编辑 收藏 网摘

  回复  引用    
#1楼 2005-10-02 20:58 | 小春 [未注册用户]
I remember to have a post in here,
do you delete it?
  回复  引用    
#2楼 2005-10-27 17:02 | 同事 [未注册用户]
Digest = ePass.HashToken (1, 2,"<%=RandData%>")
中的<%=RandData%>是从后台定义的变量并得到的,这个只能得到USBKey的初始化Key号,具体写入的文件内容能得到吗:)
  回复  引用  查看    
#3楼 [楼主]2005-10-27 18:30 | Terrylee      
TO:同事
得到USBKey的初始化Key号是:
results = ePass.GetStrProperty(7, 0, 0)

在B/S模式下读取的文件的内容跟C/S模式是不同的
下周我发一篇在C/S模式下读取USBKey文件内容的文章吧
  回复  引用    
#4楼 2005-11-28 14:23 | luckyprg [未注册用户]
您好:
我目前也在开发这块,请问您用的是不是ePass1000?我买了个Rockey2,这两者不同的吧?
  回复  引用  查看    
#5楼 [楼主]2005-11-28 14:44 | Terrylee      
@luckyprg

我们现在用的都是ePass1000,使用起来感觉挺简单的

Rockey2跟ePass1000应该都是飞天诚信公司出的,但我没有用过:)
  回复  引用    
#6楼 2005-11-28 14:54 | luckyprg [未注册用户]
Terrylee您好!
我刚上飞天诚信网站看了下,这两款产品都出了更新的产品。
ePass已有ePass1000、ePass1000ND、ePass2000、ePass3000,现在还用ePass1000会不会有点过时呢?
Rockey系列继Rockey2后也出了Rockey4、5、6了。
  回复  引用    
#7楼 2005-11-28 15:08 | luckyprg [未注册用户]
不好意思!
上面的是我猜的,我以为后面的是前面老版本的升级,刚咨询了飞天诚信公司的Rockey和ePass方面的技术人员,其实这些都是不同的产品,针对不同的对象。所以现在用ePass1000应该还是一个不错的选择。
  回复  引用  查看    
#8楼 [楼主]2005-11-28 15:18 | Terrylee      
@luckyprg

呵呵,没事:)

在开发这块中有什么好的经验告诉我啊

以后有机会我也试试Rockey2

现在觉得ePass1000不方便之处在于不能利用B/S的系统网里面写入数据

所以开发B/S模式的项目,都得配一个C/S结构的USBKey管理小工具:)
  回复  引用    
#9楼 2005-11-28 15:26 | luckyprg [未注册用户]
现在觉得ePass1000不方便之处在于不能利用B/S的系统网里面写入数据

所以开发B/S模式的项目,都得配一个C/S结构的USBKey管理小工具:)
-----------------------------------------------------------------------------------------

不会吧?我觉得应该可以在B/S下往里写东西的啊,我往Rockey2里写都成功的哦,不过我在东莞这个小地方,不知道在哪里有ePass1000买,所以还没有试过,正在查找ePass1000提供商中......

或者您加我的QQ:46660827或者MSN:luckyangel520@hotmail.com。我们讨论一下啊。
  回复  引用  查看    
#10楼 [楼主]2005-11-28 16:30 | Terrylee      
@luckyprg

也许是我没有找到好的方法^_^

在C/S下写入很简单

可是在B/S下就没有成功过,特郁闷。


  回复  引用    
#11楼 2005-11-29 12:02 | luckyprg [未注册用户]
@Terrylee

ePass1000有没有提供API接口呢?如果有那肯定可以在B/S下操作啊。
  回复  引用  查看    
#12楼 [楼主]2005-11-29 12:43 | Terrylee      
@luckyprg

在C/S下,它提供了一个类库,利用这个可以写入

但是在B/S下,ePass1000是以object形式存在的,就像例子中代码所写的那样

利用这个对象,读取数据还行,可是就是无法写入

也许是我还没有找到好的方法吧:)
  回复  引用    
#13楼 2005-11-30 09:45 | luckyprg [未注册用户]
刚订了一个ePass1000ND,是ePass1000的升级版,等货到了研究一下再说。
:)
  回复  引用  查看    
#14楼 [楼主]2005-11-30 10:13 | Terrylee      
@luckyprg

有什么新的发现告诉我一下^_^

这里先谢谢了

尤其是在B/S模式下写入ePass1000
  回复  引用    
#15楼 2005-12-12 19:17 | luckyprg [未注册用户]
@Terrylee

奇怪
我的
Digest = ePass.HashToken (1, 2,"<%=RandData%>")
这里的RandData怎么也取不到。
我在.cs中定义了
public string RandData;
然后在
Page_Load的
!IsPostBack{}中赋值的。
请问你的正常吗?
  回复  引用  查看    
#16楼 [楼主]2005-12-13 08:20 | Terrylee      
@luckyprg

这个是可以获得的
  回复  引用    
#17楼 2005-12-13 10:17 | luckyprg [未注册用户]
@Terrylee
我和你的一样的代码,可就是在Validate这段VBScript中取不到RandData的值。

我public string RandData;
然后在Page_Load中赋值的
if(!IsPostBack)
{
RandData = "测试值";
}
不知道有什么问题。
  回复  引用    
#18楼 2005-12-13 15:59 | luckyprg [未注册用户]
To:Terrylee
已搞定了。

其实用脚本语言就可以执行所有操作的。利用C语言的接口函数。
  回复  引用    
#19楼 2006-09-08 23:08 | 助燃 [未注册用户]
@Terrylee
您好,我正尝试通过delphi7调用ePass1000进行身份验证。有幸在网上看到了您这篇文章,之前我浏览了vb,asp,delphi,c的官方示例源码,也确实意识到B/S与C/S的调用方式不同,不过当时不敢肯定,且至今不清楚具体的调用规则。在您的留言中,有这样一段话:“在B/S模式下读取的文件的内容跟C/S模式是不同的,下周我发一篇在C/S模式下读取USBKey文件内容的文章吧”我在附近手工找了一下,可惜没有找到。能否告诉我这篇文章的网址。十分感谢!
  回复  引用  查看    
#20楼 [楼主]2006-09-12 08:45 | TerryLee      
@助燃
不好意思,之后再没写那篇文章!

你可以参考一下EPass1000的官方示例
  回复  引用    
#21楼 2007-05-17 14:43 | tobby [未注册用户]
@luckyprg
求教在b/s模式下对epass1000的密码写入,可以的话加我QQ26337638
  回复  引用    
#22楼 2007-05-21 11:58 | chjizh1986 [未注册用户]
@Terrylee
救急.请各位大哥帮帮忙,发一个B/S和C/S的代码和资料谢谢了。
邮箱chjizh1986@163.com
  回复  引用  查看    
#23楼