国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 潢川县| 神池县| 旬邑县| 酉阳| 赤壁市| 合作市| 万盛区| 河南省| 兴义市| 中山市| 延津县| 栾川县| 宜丰县| 华坪县| 葫芦岛市| 中西区| 建德市| 辉南县| 保靖县| 安丘市| 兴海县| 木兰县| 江西省| 陆川县| 涞源县| 建宁县| 东源县| 马龙县| 周至县| 黔南| 睢宁县| 新源县| 藁城市| 昆明市| 安新县| 东兰县| 焉耆| 南靖县| 兰州市| 溧阳市| 青河县|