//程序开始
#include<stdio.h>
#include<string.h>
typedefunsignedlongULONG;
/*初始化函数*/
voidrc4_init(unsignedchar*s,unsignedchar*key,unsignedlongLen)
{
inti=0,j=0;
chark[256]={0};
unsignedchartmp=0;
for
(i=0;i<256;i++)
{
s[i]=i;
k[i]=key[i%Len];
}
for
(i=0;i<256;i++)
{
j=(j+s[i]+k[i])%256;
tmp=s[i];
s[i]=s[j];
//交换s[i]和s[j]
s[j]=tmp;
}
}
/*加解密*/
voidrc4_crypt(unsignedchar*s,unsignedchar*Data,unsignedlongLen)
{
inti=0,j=0,t=0;
unsignedlongk=0;
unsignedchartmp;
for
(k=0;k<Len;k++)
{
i=(i+1)%256;
j=(j+s[i])%256;
tmp=s[i];
s[i]=s[j];
//交换s[x]和s[y]
s[j]=tmp;
t=(s[i]+s[j])%256;
Data[k]^=s[t];
}
}
intmain()
{
unsignedchars[256]={0},s2[256]={0};
//S-box
charkey[256]={
"justfortest"
};
charpData[512]=
"这是一个用来加密的数据Data"
;
ULONGlen=
strlen
(pData);
inti;
printf
(
"pData=%s\n"
,pData);
printf
(
"key=%s,length=%d\n\n"
,key,
strlen
(key));
rc4_init(s,(unsignedchar*)key,
strlen
(key));
//已经完成了初始化
printf
(
"完成对S[i]的初始化,如下:\n\n"
);
for
(i=0;i<256;i++)
{
printf
(
"%02X"
,s[i]);
if
(i&&(i+1)%16==0)
putchar
(
'\n'
);
}
printf
(
"\n\n"
);
for
(i=0;i<256;i++)
//用s2[i]暂时保留经过初始化的s[i],很重要的!!!
{
s2[i]=s[i];
}
printf
(
"已经初始化,现在加密:\n\n"
);
rc4_crypt(s,(unsignedchar*)pData,len);
//加密
printf
(
"pData=%s\n\n"
,pData);
printf
(
"已经加密,现在解密:\n\n"
);
//rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密钥
rc4_crypt(s2,(unsignedchar*)pData,len);
//解密
printf
(
"pData=%s\n\n"
,pData);
return0;
}
联系客服