国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

c#rc4算法,加密解密類

2019-11-14 13:40:51
字體:
供稿:網(wǎng)友

rc4算法,原理,以密匙生成256位的密匙流,然后以車輪式滾過源數(shù)據(jù)異或加密。

  1 /*  2  * 由SharpDevelop創(chuàng)建。  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         //初始化狀態(tài)向量S和臨時向量T,供keyStream方法調(diào)用 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         //初始排列狀態(tài)向量S,供keyStream方法調(diào)用 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個字節(jié) 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             //生產(chǎn)密匙流 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         //這里的參數(shù)表示示是否需要釋放那些實現(xiàn)IDisposable接口的托管對象103         protected virtual void Dispose(bool disposing)104         {105             if (_disposed) return;//如果已經(jīng)被回收,就中斷執(zhí)行106             if (disposing)107             {108                 //TODO:釋放那些實現(xiàn)IDisposable接口的托管對象109 110             }111             //TODO:釋放非托管資源,設(shè)置對象為null112             S = null;113             T = null;114             K = null;115             k = null;116             _disposed = true;117         }118     }119 }

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 广河县| 五峰| 田东县| 于都县| 澄江县| 杂多县| 呼玛县| 固安县| 德令哈市| 伊通| 临安市| 舟曲县| 玛曲县| 积石山| 福清市| 连城县| 晋江市| 象山县| 共和县| 荆州市| 莲花县| 深圳市| 新干县| 红河县| 焦作市| 喀喇| 洛宁县| 延安市| 集安市| 南宁市| 台东县| 东明县| 新和县| 磴口县| 棋牌| 客服| 遂宁市| 阳东县| 开封市| 县级市| 汉川市|