SenseLock開發手記(二)

來源:互聯網
上載者:User

 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代碼

 

// SenseLockVC.cpp : 定義 DLL 應用程式的進入點。<br />//SenseLock調用dll,封裝SenseLock的調用函數,供C#調用</p><p>#include "stdafx.h"<br />#include <stdlib.h><br />#include <conio.h><br />#include "sense4.h"</p><p>#ifdef _MANAGED<br />#pragma managed(push, off)<br />#endif</p><p>//dll的入口函數<br />BOOL APIENTRY DllMain( HMODULE hModule,<br /> DWORD ul_reason_for_call,<br /> LPVOID lpReserved<br /> )<br />{<br /> switch(ul_reason_for_call)<br /> {<br /> case DLL_PROCESS_ATTACH:<br /> break;<br /> case DLL_THREAD_ATTACH:<br /> break;<br /> case DLL_THREAD_DETACH:<br /> break;<br /> case DLL_PROCESS_DETACH:<br /> break;<br /> }<br /> return TRUE;<br />}<br />/*************************************************************************<br />*功能:調用SenseLock裝置的函數<br />*輸入參數:<br />*char *fid : 要調用的SenseLock程式檔案名稱<br />*BYTE* inbuffer: 指向輸入資料記憶體單元的指標<br />*DWORD inlen: 輸入資料記憶體單元長度<br />*BYTE* outbuffer: 指向輸出資料記憶體單元的指標<br />*DWORD outlen: 輸出資料記憶體單元長度<br />*DWORD* outSize: 輸出資料的實際使用長度<br />*輸出值:<br />*int : 返回0為調用成功,返回非0為調用失敗<br />**************************************************************************/<br />int call_sense4(char *fid, BYTE* inbuffer, DWORD inlen,BYTE* outbuffer,DWORD outlen,DWORD* outSize)<br />{<br /> /* See remarks for details.*/<br /> SENSE4_CONTEXT ctx = {0};</p><p> SENSE4_CONTEXT *pctx = NULL;<br /> DWORD size = 0;<br /> DWORD ret = 0;</p><p> /*枚舉裝置*/<br /> S4Enum(pctx, &size);<br /> if (size == 0)<br /> {<br /> return 1;<br /> }</p><p> /*申請記憶體*/<br /> pctx = (SENSE4_CONTEXT *)malloc(size);<br /> if (pctx == NULL)<br /> {<br /> return 2;<br /> }<br /> ret = S4Enum(pctx, &size);<br /> if (ret != S4_SUCCESS)<br /> {<br /> free(pctx);<br /> return 3;<br /> }<br /> memcpy(&ctx, pctx, sizeof(SENSE4_CONTEXT));<br /> free(pctx);<br /> pctx = NULL;</p><p> /*開啟裝置*/<br /> ret = S4Open(&ctx);<br /> if (ret != S4_SUCCESS)<br /> {<br /> return 4;<br /> }</p><p> /*訪問目錄*/<br /> ret = S4ChangeDir(&ctx, "//");<br /> if (ret != S4_SUCCESS)<br /> {<br /> S4Close(&ctx);<br /> return 5;<br /> }<br /> /*password<br /> 驗證密碼*/<br /> BYTE b[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};<br /> ret = S4VerifyPin(&ctx, b, 8, S4_USER_PIN);<br /> if (ret != S4_SUCCESS)<br /> {<br /> S4Close(&ctx);<br /> return 6;<br /> }</p><p> /*執行SenseLock程式*/<br /> ret = S4Execute(&ctx, fid, inbuffer, inlen, outbuffer, outlen, outSize);<br /> if (ret != S4_SUCCESS)<br /> {<br /> S4Close(&ctx);<br /> return 7;<br /> }</p><p> /*關閉裝置*/<br /> S4Close(&ctx);<br /> return 0;<br />}</p><p>/*************************************************************************<br />*dll匯出函數<br />*功能: 調用SenseLock裝置進行Hash運算<br />*輸入參數:<br />*BYTE* inbuffer: 指向輸入資料記憶體單元的指標<br />*DWORD inlen: 輸入資料記憶體單元長度<br />*BYTE* outbuffer: 指向輸出資料記憶體單元的指標<br />*DWORD outlen: 輸出資料記憶體單元長度<br />*DWORD* outSize: 輸出資料的實際使用長度<br />*輸出值:<br />*int : 返回0為調用成功,返回非0為調用失敗<br />**************************************************************************/<br />int SenseLock_Hash(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)<br />{<br /> return call_sense4("d001", inbuffer, inlen,outbuffer,outlen,outSize);<br />}</p><p>/*************************************************************************<br />*dll匯出函數<br />*功能: 調用SenseLock裝置進行TDES運算<br />*輸入參數:<br />*BYTE* inbuffer: 指向輸入資料記憶體單元的指標<br />*DWORD inlen: 輸入資料記憶體單元長度<br />*BYTE* outbuffer: 指向輸出資料記憶體單元的指標<br />*DWORD outlen: 輸出資料記憶體單元長度<br />*DWORD* outSize: 輸出資料的實際使用長度<br />*輸出值:<br />*int : 返回0為調用成功,返回非0為調用失敗<br />**************************************************************************/<br />int SenseLock_TDES(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)<br />{<br /> return call_sense4("d002", inbuffer, inlen,outbuffer,outlen,outSize);<br />}</p><p>/*************************************************************************<br />*dll匯出函數<br />*功能: 調用SenseLock裝置進行加密運算,先TDES,再Hash<br />*輸入參數:<br />*BYTE* inbuffer: 指向輸入資料記憶體單元的指標<br />*DWORD inlen: 輸入資料記憶體單元長度<br />*BYTE* outbuffer: 指向輸出資料記憶體單元的指標<br />*DWORD outlen: 輸出資料記憶體單元長度<br />*DWORD* outSize: 輸出資料的實際使用長度<br />*輸出值:<br />*int : 返回0為調用成功,返回非0為調用失敗<br />**************************************************************************/<br />int SenseLock_TDESHash(BYTE *inbuffer,DWORD inlen,BYTE * outbuffer,DWORD outlen,DWORD* outSize)<br />{<br /> return call_sense4("d003", inbuffer, inlen,outbuffer,outlen,outSize);<br />}</p><p>#ifdef _MANAGED<br />#pragma managed(pop)<br />#endif</p><p>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.