首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
USB安全钥功能扩展与优化设计
来源:本站整理  作者:佚名  2009-04-09 13:51:00



    Server端的加密算法采用DES。加密和解密是整个USB安全钥身份认证的核心。在安全钥的初期产品中,已经实现了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位随机数,并进行解密,最终函数值为解密后的

上一页  [1] [2] [3] [4] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:289,101.60000 毫秒