pc端环境搭建
1.新建一个win32 dll项目。把sense4.h,sense4.lib放到项目目录下面一份。并且添加到项目中。(vc6中有个项目设置,能指定.h,.lib文件的目录。vs2005不知道把这个选项改到什么地方去了,算了,不找了,直接copy一份算了。^_^)
2.添加一个.def文件
LIBRARY "SenseLockVC"
DESCRIPTION 'BeQuick'
EXPORTS
SenseLock_Hash @1
3.pc端vc代码
#include "stdafx.h"
#include <stdlib.h>
#include <conio.h>
#include "sense4.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
//dll的入口函数
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
/*************************************************************************
*功能:调用SenseLock设备的函数
*输入参数:
*char *fid : 要调用的SenseLock程序文件名
*BYTE* inbuffer: 指向输入数据内存单元的指针
*DWORD inlen: 输入数据内存单元长度
*BYTE* outbuffer: 指向输出数据内存单元的指针
*DWORD outlen: 输出数据内存单元长度
*DWORD* outSize: 输出数据的实际使用长度
*输出值:
*int : 返回0为调用成功,返回非0为调用失败
**************************************************************************/
int call_sense4(char *fid, BYTE* inbuffer, DWORD inlen,BYTE* outbuffer,DWORD outlen,DWORD* outSize)
{
/* See remarks for details.*/
SENSE4_CONTEXT ctx = {0};
SENSE4_CONTEXT *pctx = NULL;
DWORD size = 0;
DWORD ret = 0;
/*枚举设备*/
S4Enum(pctx, &size);
if (size == 0)
{
return 1;
}
/*申请内存*/
pctx = (SENSE4_CONTEXT *)malloc(size);
if (pctx == NULL)
{
return 2;
}
ret = S4Enum(pctx, &size);
if (ret != S4_SUCCESS)
{
free(pctx);
return 3;
}
memcpy(&ctx, pctx, sizeof(SENSE4_CONTEXT));
free(pctx);
pctx = NULL;
/*打开设备*/
ret = S4Open(&ctx);
if (ret != S4_SUCCESS)
{
return 4;
}
/*访问目录*/
ret = S4ChangeDir(&ctx, "//");
if (ret != S4_SUCCESS)
{
S4Close(&ctx);
return 5;
}
/*password
验证密码*/
BYTE b[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};
ret = S4VerifyPin(&ctx, b, 8, S4_USER_PIN);
if (ret != S4_SUCCESS)
{
S4Close(&ctx);
return 6;
}
/*执行SenseLock程序*/
ret = S4Execute(&ctx, fid, inbuffer, inlen, outbuffer, outlen, outSize);
if (ret != S4_SUCCESS)
{
S4Close(&ctx);
return 7;
}
/*关闭设备*/
S4Close(&ctx);
return 0;
}
/*************************************************************************
*dll导出函数
*功能: 调用SenseLock设备进行Hash运算
*输入参数:
*BYTE* inbuffer: 指向输入数据内存单元的指针
*DWORD inlen: 输入数据内存单元长度
*BYTE* outbuffer: 指向输出数据内存单元的指针
*DWORD outlen: 输出数据内存单元长度
*DWORD* outSize: 输出数据的实际使用长度
*输出值:
*int : 返回0为调用成功,返回非0为调用失败
**************************************************************************/
int SenseLock_Hash(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)
{
return call_sense4("d001", inbuffer, inlen,outbuffer,outlen,outSize);
}
/*************************************************************************
*dll导出函数
*功能: 调用SenseLock设备进行TDES运算
*输入参数:
*BYTE* inbuffer: 指向输入数据内存单元的指针
*DWORD inlen: 输入数据内存单元长度
*BYTE* outbuffer: 指向输出数据内存单元的指针
*DWORD outlen: 输出数据内存单元长度
*DWORD* outSize: 输出数据的实际使用长度
*输出值:
*int : 返回0为调用成功,返回非0为调用失败
**************************************************************************/
int SenseLock_TDES(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)
{
return call_sense4("d002", inbuffer, inlen,outbuffer,outlen,outSize);
}
/*************************************************************************
*dll导出函数
*功能: 调用SenseLock设备进行加密运算,先TDES,再Hash
*输入参数:
*BYTE* inbuffer: 指向输入数据内存单元的指针
*DWORD inlen: 输入数据内存单元长度
*BYTE* outbuffer: 指向输出数据内存单元的指针
*DWORD outlen: 输出数据内存单元长度
*DWORD* outSize: 输出数据的实际使用长度
*输出值:
*int : 返回0为调用成功,返回非0为调用失败
**************************************************************************/
int SenseLock_TDESHash(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)
{
return call_sense4("d003", inbuffer, inlen,outbuffer,outlen,outSize);
}
#ifdef _MANAGED
#pragma managed(pop)
#endif