rc4..
1 /* 2 * 由SharpDevelop创建。 3 * 用户: YISH 4 * 日期: 04/04/2015 5 * 时间: 03:01 6 * 7 * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件 8 */ 9 using System; 10 11 namespace Libraries 12 { 13 /// <summary> 14 /// Description of CryptoGraphy. 15 /// </summary> 16 public class RC4Crypt:IDisposable{ 17 byte[] S; 18 byte[] T; 19 byte[] K; 20 byte[] k; 21 public RC4Crypt() { } 22 public RC4Crypt(byte[] key){ 23 this.K=key; 24 } 25 public byte[] Key 26 { 27 get 28 { 29 return K; 30 } 31 set 32 { 33 K = value; 34 } 35 } 36 //初始化状态向量S和临时向量T,供keyStream方法调用 37 void initial(){ 38 if (S == null || T == null) 39 { 40 S = new byte[256]; 41 T = new byte[256]; 42 } 43 for (int i = 0; i < 256; ++i) { 44 S[i]=(byte)i; 45 T[i] = K[i % K.Length]; 46 } 47 } 48 //初始排列状态向量S,供keyStream方法调用 49 void ranges(){ 50 int j=0; 51 for (int i = 0; i < 256; ++i) { 52 j=(j+S[i]+T[i])&0xff; 53 S[i]=(byte)((S[i]+S[j])&0xff); 54 S[j]=(byte)((S[i]-S[j])&0xff); 55 S[i]=(byte)((S[i]-S[j])&0xff); 56 } 57 } 58 //生成密钥流 59 //len:明文为len个字节 60 void keyStream(int len){ 61 initial(); 62 ranges(); 63 int i=0,j=0,t=0; 64 k=new byte[len]; 65 for (int r = 0; r < len; r++) { 66 i=(i+1)&0xff; 67 j=(j+S[i])&0xff; 68 69 S[i]=(byte)((S[i]+S[j])&0xff); 70 S[j]=(byte)((S[i]-S[j])&0xff); 71 S[i]=(byte)((S[i]-S[j])&0xff); 72 73 t=(S[i]+S[j])&0xff; 74 k[r]=S[t]; 75 } 76 } 77 78 public byte[] EncryptByte(byte[] data){ 79 //生产密匙流 80 keyStream(data.Length); 81 for (int i = 0; i < data.Length; i++) { 82 k[i]=(byte)(data[i]^k[i]); 83 } 84 return k; 85 } 86 87 public byte[] DecryptByte(byte[] data){ 88 return EncryptByte(data); 89 } 90 91 //是否回收完毕 92 bool _disposed; 93 public void Dispose() 94 { 95 Dispose(true); 96 GC.SuppressFinalize(this); 97 } 98 ~RC4Crypt() 99 { 100 Dispose(false); 101 } 102 //这里的参数表示示是否需要释放那些实现IDisposable接口的托管对象 103 protected virtual void Dispose(bool disposing) 104 { 105 if (_disposed) return;//如果已经被回收,就中断执行 106 if (disposing) 107 { 108 //TODO:释放那些实现IDisposable接口的托管对象 109 110 } 111 //TODO:释放非托管资源,设置对象为null 112 S = null; 113 T = null; 114 K = null; 115 k = null; 116 _disposed = true; 117 } 118 } 119 }
原文:http://www.cnblogs.com/mokeyish/p/5041949.html