新闻中心

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位随机数,并进行解密,最终函数值为解密后的



评论


相关推荐

技术专区

关闭