rc4算法,原理,以密匙生成256位的密匙流,然后以车轮式滚过源数据异或加密。
1/*2* 由SharpDevelop创建。3* 用户: YISH4* 日期: 04/04/20155* 时间: 03:016*7* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件8*/9usingSystem;1011namespaceLibraries12{13///<summary>14///Description of CryptoGraphy.15///</summary>16publicclassRC4Crypt:IDisposable{17byte[] S;18byte[] T;19byte[] K;20byte[] k;21publicRC4Crypt() { }22publicRC4Crypt(byte[] key){23this.K=key;24}25publicbyte[] Key26{27get28{29returnK;30}31set32{33K =value;34}35}36//初始化状态向量S和临时向量T,供keyStream方法调用37voidinitial(){38if(S ==null|| T ==null)39{40S =newbyte[256];41T =newbyte[256];42}43for(inti =0; i <256; ++i) {44S[i]=(byte)i;45T[i] = K[i %K.Length];46}47}48//初始排列状态向量S,供keyStream方法调用49voidranges(){50intj=0;51for(inti =0; i <256; ++i) {52j=(j+S[i]+T[i])&0xff;53S[i]=(byte)((S[i]+S[j])&0xff);54S[j]=(byte)((S[i]-S[j])&0xff);55S[i]=(byte)((S[i]-S[j])&0xff);56}57}58//生成密钥流59//len:明文为len个字节60voidkeyStream(intlen){61initial();62ranges();63inti=0,j=0,t=0;64k=newbyte[len];65for(intr =0; r < len; r++) {66i=(i+1)&0xff;67j=(j+S[i])&0xff;6869S[i]=(byte)((S[i]+S[j])&0xff);70S[j]=(byte)((S[i]-S[j])&0xff);71S[i]=(byte)((S[i]-S[j])&0xff);7273t=(S[i]+S[j])&0xff;74k[r]=S[t];75}76}7778publicbyte[] EncryptByte(byte[] data){79//生产密匙流80keyStream(data.Length);81for(inti =0; i < data.Length; i++) {82k[i]=(byte)(data[i]^k[i]);83}84returnk;85}8687publicbyte[] DecryptByte(byte[] data){88returnEncryptByte(data);89}9091//是否回收完毕92bool_disposed;93publicvoidDispose()94{95Dispose(true);96GC.SupPRessFinalize(this);97}98~RC4Crypt()99{100Dispose(false);101}102//这里的参数表示示是否需要释放那些实现IDisposable接口的托管对象103protectedvirtualvoidDispose(booldisposing)104{105if(_disposed)return;//如果已经被回收,就中断执行106if(disposing)107{108//TODO:释放那些实现IDisposable接口的托管对象109110}111//TODO:释放非托管资源,设置对象为null112S =null;113T =null;114K =null;115k =null;116_disposed =true;117}118}119}