ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> C#教程 >> c# rc4算法,加密解密类

c# rc4算法,加密解密类

来源:网络整理     时间:2015-12-16     关键词:代码编写

本篇文章主要介绍了"c# rc4算法,加密解密类",主要涉及到代码编写方面的内容,对于C#教程感兴趣的同学可以参考一下: rc4算法,原理,以密匙生成256位的密匙流,然后以车轮式滚过源数据异或加密。 1/* 2 * 由SharpDevelop创建。3 * 用户: YISH4 ...

rc4算法,原理,以密匙生成256位的密匙流,然后以车轮式滚过源数据异或加密。

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

以上就介绍了c# rc4算法,加密解密类,包括了代码编写方面的内容,希望对C#教程有兴趣的朋友有所帮助。

本文网址链接:http://www.codes51.com/article/detail_248570.html

相关图片

相关文章