2、 { j=(j+s+k)%256; swap(s,s[j]); } i=j=0;
得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。
根据目前的分析结果,没有任何的分析对于密钥长度达到128位的RC4有效,所以,RC4是目前最安全的加密算法之一,大家可以放心使用! while(明文未结束) { ++i%=n; j=(j+s)%n; swap(s,s[j]); sub_k=s((s+s[j])%n); }位长可以自己随意设置,将256设置为你希望的即可我的C语言源码:平台:windo
3、wsXP,VC++6.0有什么大家可以讨论的地方请留言或发邮件至我邮箱:#include
#include
#include
voidswap(unsignedchar*s1,unsignedchar*s2)
{
chartemp;
temp=*s1;
*s1=*s2;
*s2=temp;
}
voidre_S(unsignedchar*S)
{
unsignedinti;
for(i=0;i<256;i++)
S[i]=i;
}
voidre_T(unsignedcha
4、r*T,char*key)
{
inti;
intkeylen;
keylen=strlen(key);
for(i=0;i<256;i++)
T[i]=key[i%keylen];
}
voidre_Sbox(unsignedchar*S,unsignedchar*T)
{
inti;
intj=0;
for(i=0;i<256;i++)
{
j=(j+S[i]+T[i])%256;
swap(&S[i],&S[j]);
}
}
voidre_RC4(unsignedchar*S,char*key)
{
charT[2
5、55]={0};
re_S(S);
re_T(T,key);
re_Sbox(S,T);
}
voidRC4(FILE*readfile,FILE*writefile,char*key)
{
unsignedcharS[255]={0};
unsignedcharreadbuf[1];
inti,j,t;
re_RC4(S,key);
i=j=0;
while(fread(readbuf,1,1,readfile))
{
i=(i+1)%256;
j=(j+S[i])%256;
swap(&S[i],&S[j]);
6、t=(S[i]+(S[j]%256))%256;
readbuf[0]=readbuf[0]^S[t];
fwrite(readbuf,1,1,writefile);
memset(readbuf,0,1);
}
printf("加密
7、解密成功!!!");
}
intmain(intargc,char*argv[])
{
char*Filename1,*Filename2;
char*key;
FILE*file1,*file2;
Filename1=argv[1];
Filename2=argv[2];
key=a
8、rgv[3];
if(argc==4)
{
printf("**********************正在加密中*******************");
}
else
{
printf("输入格式:");
printf("文件名
9、加密或解密文件名
10、存放文件名
11、密钥");
return-1;
}
if((file1=fopen(Filename1,"rb"))==NULL
12、
13、(file2=fopen(Filename2,"wb"))==NULL)
{
printf("Can'topenfile
14、");
return-1;
}
RC4(file1,file2,key);
fclose(file1);
fclose(file2);
return0;
}加密解密算法RC5--#include#