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语言源码:平台:windowsXP,VC
3、++6.0有什么大家可以讨论的地方请留言或发邮件至我邮箱:#include#include#includevoidswap(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(unsignedchar*T,char*key){inti;intkeyle
4、n;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[255]={0};re_S(S);re_T(T,key);re_Sbox(S,T);}voidRC4(F
5、ILE*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]); t=(S[i]+(S[j]%256))%256; readbuf[0]=readbuf[0]^S[t]; fwrite(readbuf,1,
6、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=argv[3];if(argc==4){ printf("**********************正在加密中*******************");}else{ pr
8、intf("输入格式:"); printf("文件名
9、加密或解密文件名
10、存放文件名
11、密钥"); return-1;}if((file1=fopen(Filename1,"rb"))==NULL
12、
13、(file2=fopen(Filename2,"wb"))==NULL){ printf("Can'topenfile"); return-1;} RC4(file1,file2,key);fclose(file1);fclose(file2);return0;}加密解密算法RC5--#include14、h>#include"math.h"#includestaticconstw=32;staticconstr=12;staticconstb=16;static