[ 来源:http://www.it55.com | 作者: | 时间:2007-10-11 | 收藏 | 推荐 ] 【大 中 小】
/////////////////////////////////////////////////////////////////////////
//** RC4加密算法
//** 用法: 1.定义一个RC4_KEY结构,2.用函数RC4Init初始化状态,3.用RC4Works加密
//使用说明:
//1.定义密钥变量RC4_KEY rc4key;
//2.初始化密钥 RC4Init(255字节以内的口令字符串,口令长度,&rc4key);
//3.加/解密 RC4Works(无符号字符型数据,数据长度,&rc4key);
/**////////////////////////////////////////////////////////////////////////////
#ifndef __RC4_H
#define __RC4_H
#ifdef __cplusplus
extern "C" {
#endif 免费网页模版下载http://www.it55.com
typedef struct _RC4_KEY
{
BYTE bySTab[256]; //256字节的S表
BYTE byIt,byJt; //t时刻的两个指针
} RC4_KEY,*PRC4_KEY; vd;k;l http://www.it55.com rdfg
BOOL RC4Init(LPSTR, int, RC4_KEY *);
BOOL RC4Works (LPBYTE, int, RC4_KEY *); IT资讯之家 http://www.it55.com
static BYTE xyzzy_tmpc; 免费网页模版下载http://www.it55.com
#define SWAP_BYTE(a,b) xyzzy_tmpc=a; a=b; b=xyzzy_tmpc
BOOL RC4Init(char *pszKey, int nKeyLen, RC4_KEY *key)
{
BYTE by1,by2;
LPBYTE bySTab;
int nCount;
if((strlen(pszKey)<1)||(nKeyLen<1)) return FALSE;
nKeyLen=(nKeyLen>256)?(256):nKeyLen; //口令最多只能256字节
bySTab = &key->bySTab[0];
for (nCount=0; nCount<256; nCount++) bySTab[nCount]=(BYTE)nCount;
key->byIt=0;
key->byJt=0;
by1=by2=0;
for (nCount=0; nCount<256; nCount++)
{
by2 = (BYTE)(pszKey[by1] + bySTab[nCount] + by2);
SWAP_BYTE(bySTab[nCount], bySTab[by2]);
by1 = (BYTE)(by1+1)%nKeyLen;
}
return TRUE;
}
免费网页模版下载http://www.it55.com
BOOL RC4Works(LPBYTE pbyData, int nDataLen, RC4_KEY *key)
{
if((pbyData==NULL) ||(nDataLen<1)) return FALSE;
BYTE byIt,byJt;
LPBYTE bySTab;
int nCount; vd;k;l http://www.it55.com rdfg
byIt=key->byIt;
byJt=key->byJt;
免费设计素材下载http://www.it55.com
bySTab = &key->bySTab[0];
for (nCount=0; nCount<nDataLen; nCount++)
{
byIt++;
byJt += bySTab[byIt];
SWAP_BYTE(bySTab[byIt], bySTab[byJt]);
pbyData[nCount] ^= bySTab[(bySTab[byIt] + bySTab[byJt])&0xFF];
}
key->byIt=byIt;
key->byJt=byJt;
return TRUE;
} 精美韩国模版下载http://www.it55.com
#ifdef __cplusplus
}
#endif
免费设计素材下载http://www.it55.com
#endif
it55.com
(编辑:IT资讯之家 www.it55.com)