<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > USB安全鑰功能擴展與優(yōu)化設計

USB安全鑰功能擴展與優(yōu)化設計

作者: 時(shí)間:2009-04-09 來(lái)源:網(wǎng)絡(luò ) 收藏

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

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

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

class _declspec(dllexport) CKeyDllApp

{public:

BOOL GetChallenge();

int* Challenge();//導出函數

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

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

BOOL cha_gen;

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

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

BOOL Init();

protected:

BYTE DESKey[8]; //密鑰

BYTE IniDeData[8]; //外部輸入的需要解密的數據

BYTE IniEnData[8]; //外部輸入的加密前的隨機數

BYTE DESDeData[8]; //解密后的數據

BYTE DESEnData[8]; //加密后的數據

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

BYTE challenge[8];

......}

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

BOOL CKeyDllApp::GetChallenge()//這是產(chǎn)生隨機數的函數,它調用API的函數srand(),最終產(chǎn)生的8位隨機數存在數組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]=='t') || (challenge[i] == 0) || (challenge[i]==255) || (challenge[i]== 256- 't'));}

challenge[8] = 0;

cha_gen = TRUE;

return TRUE;}

return FALSE;}

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

{

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

stringtobit (IniDeData, TempInput);

stringtobit (DESKey, TempKey);

decry (TempInput, TempKey, TempOutput);

bittostring (TempOutput, DESDeData);}

void CKeyDllApp::DESEncrypt() //加密函數,可完成

對8位隨機數的加密功能,然后可與原隨機數比較,看是否相等

{

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])//導出的獲取解密數據的函數。此函數需要賦值――已加密了的8位隨機數,并進(jìn)行解密,最終函數值為解密后的



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>