当前位置:首页>网络学院>程序开发>Visual C++教程>文章内容

实现RC4加解密算法的源代码 可移植性强

[ 来源: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

it55.com

#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

http://www.it55.com在线教程

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字节

免费设计素材下载http://www.it55.com

    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

返回顶部
 

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]