ASP.NET学习社区

首页 » ASP.NET学习区 » 自由问答 » 开发USB KEY 认证
77631527 - 2008-6-24 10:26:00
。。谁能帮下我啊。
suresy - 2008-6-24 22:08:00
帮顶一下,没弄过这东东................
aspx1 - 2008-6-25 6:25:00
我也没接触过类似的东东啊。见笑
zorosuteng - 2008-6-25 8:13:00
读取硬件USB KEY的信息可通过ActiveX控件来完成。
实现:
zorosuteng - 2008-6-25 8:18:00
误操作没写完就回复了  接着来!!!
C#项目的没写过C++的写过,你参照一下吧!或许有些帮助!
实现:
打开Visual Studio.Net 2005,建立一个解决方案或项目USBKey。在项目类型中选择Visual C++下的ATL选项,在模板中选择”ATL Project”,项目名为USBKey。点击确定,系统就在指定的目录下建立了USBKey项目和解决方案。
点击确定后,会出现建立ATL项目向导对话框,引导用户快捷方便的建立ATL项目。点击下一步,进入项目属性设置对话框,可以通过该对话框选择是否属性化和发布方式等。 里面的具体选项和替换的方案我不详细说了,自己琢磨吧!

接口方法:
在USBKey.cpp文件里添加函数GetContent的具体实现过程。核心代码如下:
STDMETHODIMP CUSBKey::GetContent(LONG lFlags, BSTR* pUSBContent)

    EPAS_STATUS retval;//状态
    EPAS_HANDLE epsHandle ; //EPAS句柄
    // 创建设备句柄
    retval = epas_CreateContext(&epsHandle,0,EPAS_API_VERSION);//调用EPAS的API函数访问USB Key硬件
    if (FT_SUCCESS != retval) 
    {return ReturnError(retval);}//返回相应的错误
    // 打开设备
    retval = epas_OpenDevice(epsHandle,lFlags,(void *)szAppID);
    if (FT_SUCCESS != retval)
    {return ReturnError(retval);}
    //得到序列号
    unsigned long sn[2] = {0};
    retval = epas_GetProperty(epsHandle,EPAS_PROP_SERNUM,NULL,sn,sizeof(sn));
    if (FT_SUCCESS != retval) 
    {return ReturnError(retval);}
    char m_sn [8*1024+17]={0};
    sprintf_s(m_sn, "%08X%08X", sn[1], sn[0]);//以16进制打印到字符串m_sn中
    //得到加密字符串
    //1、登录
    char s[80] = "1234";//登录密码
    retval = epas_Verify(epsHandle,EPAS_VERIFY_USER_PIN,(unsigned char*)s,4);
    if (FT_SUCCESS != retval){return ReturnError(retval);}
    //2、打开文件
    EPAS_FILEINFO epsFileInfo = {0};
    unsigned long epsFileID = 0x1234;//文件编号
    retval = epas_OpenFile(epsHandle,0,epsFileID,&epsFileInfo,sizeof(epsFileInfo));
    if (FT_SUCCESS != retval){return ReturnError(retval);  }
    //3、读取文件内容
    unsigned long rLen = 0;
    unsigned char rBuff[8*1024] = {0};
    ZeroMemory(rBuff,8*1024);
    retval = epas_Read(epsHandle,0,0,rBuff,epsFileInfo.ulFileSize,&rLen);
    if (FT_SUCCESS != retval){return ReturnError(retval);}
    //4、关闭文件
    retval = epas_CloseFile(epsHandle);
    //关闭设备,删除Context
    retval = epas_CloseDevice(epsHandle);
    retval = epas_DeleteContext(epsHandle);
    strcat_s(m_sn,(char*)rBuff);
    *pUSBContent=_com_util::ConvertStringToBSTR((char *)r_sn);
    return S_OK;
}

为了能在函数中使用USBKey厂家提供的访问函数和使用BSTR类,需在stdafx.h头文件里面引入相应的.h和.lib文件。如下:

#include "FT_ND_API.h"// ePass1000ND的接口头文件
#include "comutil.h"
#pragma comment(lib, " FT_ND_API.lib")
#pragma comment(lib, "comsuppw.lib")
然后是错误处理 实现IObjectSafety接口测试部署就行了,以前的时候搞过,找的以前的资料不是很全了,关键的部分我已经写出来了。
asp.net - 2008-6-25 9:43:00
强人,佩服,留个记号,以后备用
77631527 - 2008-6-25 14:23:00
..厉害。。谢谢。
1
查看完整版本: 开发USB KEY 认证