新聞中心

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

        USB安全鑰功能擴展與優化設計

        作者: 時間:2009-04-09 來源:網絡 收藏

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

        動態鏈接庫(DLL)是一個包含了若干個函數的可執行模塊,Windows應用程序可以調用這些函數來完成實際任務。對于調用DLL的用戶來說,利用的資源僅僅是應用函數接口和一個后綴為.dll的文件,實現加密算法的模塊化。

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

        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中實現各函數的具體,主要是算法的實現。

        BOOL CKeyDllApp::GetChallenge()//這是產生隨機數的函數,它調用API的函數srand(),最終產生的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位隨機數,并進行解密,最終函數值為解密后的



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 清丰县| 尤溪县| 塔城市| 曲阜市| 龙里县| 翁牛特旗| 吉隆县| 临海市| 武城县| 温宿县| 辽宁省| 含山县| 喀喇沁旗| 大连市| 江门市| 炉霍县| 湘乡市| 兴国县| 涡阳县| 阿拉善盟| 新巴尔虎右旗| 九龙城区| 连平县| 昌宁县| 绥中县| 贡嘎县| 孙吴县| 张掖市| 雷山县| 万宁市| 庆阳市| 桦川县| 虞城县| 绥江县| 昌吉市| 大港区| 呼和浩特市| 绥中县| 南开区| 嵊泗县| 东山县|