日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
USB安全鑰功能擴(kuò)展與優(yōu)化設(shè)計(jì)
USB安全鑰功能擴(kuò)展與優(yōu)化設(shè)計(jì)
 更新時(shí)間:2008-8-4 4:55:38  點(diǎn)擊數(shù):45
【字體: 字體顏色
然后再將這48位數(shù)據(jù)變換為32位,并與數(shù)據(jù)的32位左半部分相與后作為新的32位右半部分。而32位左半部分基本不變。最后,左右各32位數(shù)組合在一起便構(gòu)成了一輪加密后的64位密文。重復(fù)同樣運(yùn)算16位,便完成了加密/解密功能[4]。

Server 端的加密算法采用DES。加密和解密是整個(gè)USB安全鑰身份認(rèn)證的核心。在安全鑰的初期產(chǎn)品中,已經(jīng)實(shí)現(xiàn)了DES算法下的加密功能。但是,作為產(chǎn)品,其安全性是第一位的。而且,對于要將加密算法嵌入自己系統(tǒng)的用戶來說,提供給他們大量的加密算法的源代碼是不合適的。要對DES算法進(jìn)行修改,將其從 Server端的源程序中提出,改掉原來復(fù)雜的調(diào)用機(jī)制,改為提供給用戶三個(gè)簡單的接口函數(shù):產(chǎn)生隨機(jī)數(shù)、加密和解密函數(shù)、實(shí)現(xiàn)DES加密算法的DLL。

動態(tài)鏈接庫(DLL)是一個(gè)包含了若干個(gè)函數(shù)的可執(zhí)行模塊,Windows應(yīng)用程序可以調(diào)用這些函數(shù)來完成實(shí)際任務(wù)。對于調(diào)用DLL的用戶來說,利用的資源僅僅是應(yīng)用函數(shù)接口和一個(gè)后綴為.dll的文件,實(shí)現(xiàn)加密算法的模塊化。

在建立了個(gè)VC工程之后,需要建立主程序頭文件KeyDll.h,加入如下代碼。這些代碼中定義了導(dǎo)出的四個(gè)函數(shù)。

class _declspec(dllexport) CkeyDllApp

{public:

BOOL GetChallenge();

int* Challenge();//導(dǎo)出函數(shù)

int* DecryptData(BYTE []);//導(dǎo)出函數(shù),需要解密的隨機(jī)數(shù),可存儲在數(shù)組InputNum[8]中。此函數(shù)輸出值即為加密后的數(shù)據(jù),輸出格式為數(shù)組DESDeData[8]。

Int* EncryptData(BYTE []);//導(dǎo)出函數(shù),需要加密的隨機(jī)數(shù),可存儲在數(shù)組InputNum[8]中。此函數(shù)輸出值即為加密后的數(shù)據(jù),輸出格式為數(shù)組DESEnData[8]

BOOL cha_gen;

void DESDecrypt ();//BYTE *Data,BYTE *Key); //解密函數(shù)定義

void DESEncrypt ();//BYTE *Bata,BYTE *Key); //加密函數(shù)定義

BOOL Init();

protected:

BYTE DESKey[8]; //密鑰

BYTE IniDeData[8]; //外部輸入的需要解密的數(shù)據(jù)

BYTE IniEnData[8]; //外部輸入的加密前的隨機(jī)數(shù)

BYTE DESDeData[8]; //解密后的數(shù)據(jù)

BYTE DESEnData[8]; //加密后的數(shù)據(jù)

WORD subkey[16][48]; //子密鑰

BYTE challenge[8];

……}

然后,在主文件KeyDll.cpp中實(shí)現(xiàn)各功能函數(shù)的具體功能,主要是算法的實(shí)現(xiàn)。

BOOL CKeyDllApp::GetChallenge()//這是產(chǎn)生隨機(jī)數(shù)的函數(shù),它調(diào)用API的函數(shù)srand(),最終產(chǎn)生的8位隨機(jī)數(shù)存在數(shù)組challenge[8]中

{

int i;

srand((unsigned)time (NULL));

if(!cha_gen){

for(i=0;i<8;i++){

do{challenge[i]=(rand()/256);}

while((challenge[i]=='')||(challenge[i] = =0)||(challenge[i]==255)||(challenge[i]==256-''));}

challenge[8]=0;

cha_gen=TRUE;

return TRUE;}

retur FALSE;}

void CKeyDllApp::DESDecrypt ()//解密函數(shù),完成對已加密的8位隨機(jī)數(shù)的解密功能

{

WORD TempInput[64],TempOutput[64],TempKey[64];

Stringtobit (IniDeData,TempInput);

Stringtobit (DESKey,TempKey);

decry (TempInput,TempKey,TempOutput);

bittostring (TempOutput,DESDeData);}

void CKeyDllApp::DESEncrypt() //加密函數(shù),可完成對8位隨機(jī)數(shù)的加密功能,然后可與原隨機(jī)數(shù)比較,看是否相等

{

WORD TempInput [64],TempOutput[64],TempKey[64];

stringtobit (IniEnData,TempInput);

stringtobit (DESKey,TempKey);

encry(TempInput,TempKey,TempOutput);

bittostring (TempOutput,DESEnData);}

int* CKeyDllApp::DecryptData (BYTE InputDeNum[8])//導(dǎo)出獲取解密數(shù)據(jù)的函數(shù)。此函數(shù)需要賦值——已加密了的8位隨機(jī)數(shù),并進(jìn)行解密,最終函數(shù)值為解密后的8位隨機(jī)數(shù)

{

int i;

for (i=0;I<8;i++)

IniDeData[i]=InputDeNum[8];

return (int *)DESDeData;}

int* CKeyDllapp::EncryptData (BYTE InputEnNum [8])//導(dǎo)出的獲取加密數(shù)據(jù)的函數(shù)。此函數(shù)需要賦值——8位隨機(jī)數(shù),直接調(diào)用并賦8位隨機(jī)數(shù)后,此函數(shù)將調(diào)用加密函數(shù)并進(jìn)行加密,最終函數(shù)值為加密后的8位隨機(jī)數(shù)

{

int I;

for (i=0;i<8;i++)

IniEnData[i]=InputEnNum[i];

Return (int *)DESEnData;}

編譯、連接后接產(chǎn)生一系列文件,在加上源工程文件,將會有數(shù)量比較龐大的文件系統(tǒng)。最終,只需提供給用戶三個(gè)文件即可,它們是:

·.dll,這是DLL文件;

·.lib,這個(gè)文件將在應(yīng)用DLL的程序編程和連接時(shí),提供連接向?qū)В?/font>

·.h,這個(gè)頭文件告訴用戶此DLL中導(dǎo)出了哪些量可以用。

DES的DLL導(dǎo)出了一個(gè)類:CkeyDllApp。在這個(gè)類中共有4個(gè)導(dǎo)出函數(shù)可以導(dǎo)入應(yīng)用程序中,用戶在導(dǎo)入了加密DLL后,可以在自己的程序中直接調(diào)用以下函數(shù):

·BOOL GetChallenge(),用于在應(yīng)用程序支持循環(huán)結(jié)構(gòu);

·int *Challenge(),產(chǎn)生隨機(jī)數(shù),并存儲在Challenge[8]中;

·int *DecryptData(BYTE []),用于解密隨機(jī)數(shù);

·int *EncryptData(BYTE []),用于加密隨機(jī)數(shù)。

2.2 USB安全鑰新增功能描述

USB 安全鑰和PC傳輸?shù)臄?shù)據(jù)量不大,而且沒有很高的速度要求。因此,在編寫固件時(shí)就將其歸類為HID(USB的人機(jī)接口設(shè)備類)。在編寫PC端的驅(qū)動程序時(shí)可以直接調(diào)用Windows提供的HID的API函數(shù),大大降低了編程的難度。更重要的是,Windows對HID設(shè)備的支持非常完備,不需要用戶再編寫底層的驅(qū)動。

安全鑰端的設(shè)計(jì)內(nèi)容主要是:實(shí)現(xiàn)在線修改存儲在安全鑰內(nèi)的KeyID和讀取KeyID兩個(gè)功能,分別由函數(shù)Set_KeyID和Get_KeyID實(shí)現(xiàn)。KeyID是安全鑰的標(biāo)識符,在安全鑰插到PC 上后,被讀出并送往Server進(jìn)行檢查。在初期產(chǎn)品中,KeyID只能是安全鑰首次接到PC上讀取,且不能更改,這為廠家和開發(fā)者造成了不便。因此要更改初期產(chǎn)品中的KeyID,這必須修改安全鑰端的匯編程序,然后再“燒”寫到安全鑰中,非常麻煩。新增功能可實(shí)現(xiàn)KeyID的在線修改。

PC端的設(shè)計(jì)包括兩步。首先要實(shí)現(xiàn)在PC上讀取安全鑰內(nèi)的KeyID。通過安全鑰的端點(diǎn)1,8個(gè)字節(jié)的KeyID被周期地送出。PC要獲取這些數(shù)據(jù),調(diào)用HID類庫Get_Report(Feature)。從安全鑰發(fā)來的包含KeyID的包的特性及技術(shù)指標(biāo)如表1。

表1 調(diào)用HID類庫獲取KeyID

  • 上一篇: 如何利用集成功放構(gòu)成BTL電路
  • 下一篇: PCI總線接口技術(shù)及其在高速數(shù)據(jù)采集系統(tǒng)中的應(yīng)用
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1