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

 /*
* 由SharpDevelop创建。
* 用户: YISH
* 日期: 04/04/2015
* 时间: 03:01
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System; namespace Libraries
{
/// <summary>
/// Description of CryptoGraphy.
/// </summary>
public class RC4Crypt:IDisposable{
byte[] S;
byte[] T;
byte[] K;
byte[] k;
public RC4Crypt() { }
public RC4Crypt(byte[] key){
this.K=key;
}
public byte[] Key
{
get
{
return K;
}
set
{
K = value;
}
}
//初始化状态向量S和临时向量T,供keyStream方法调用
void initial(){
if (S == null || T == null)
{
S = new byte[];
T = new byte[];
}
for (int i = ; i < ; ++i) {
S[i]=(byte)i;
T[i] = K[i % K.Length];
}
}
//初始排列状态向量S,供keyStream方法调用
void ranges(){
int j=;
for (int i = ; i < ; ++i) {
j=(j+S[i]+T[i])&0xff;
S[i]=(byte)((S[i]+S[j])&0xff);
S[j]=(byte)((S[i]-S[j])&0xff);
S[i]=(byte)((S[i]-S[j])&0xff);
}
}
//生成密钥流
//len:明文为len个字节
void keyStream(int len){
initial();
ranges();
int i=,j=,t=;
k=new byte[len];
for (int r = ; r < len; r++) {
i=(i+)&0xff;
j=(j+S[i])&0xff; S[i]=(byte)((S[i]+S[j])&0xff);
S[j]=(byte)((S[i]-S[j])&0xff);
S[i]=(byte)((S[i]-S[j])&0xff); t=(S[i]+S[j])&0xff;
k[r]=S[t];
}
} public byte[] EncryptByte(byte[] data){
//生产密匙流
keyStream(data.Length);
for (int i = ; i < data.Length; i++) {
k[i]=(byte)(data[i]^k[i]);
}
return k;
} public byte[] DecryptByte(byte[] data){
return EncryptByte(data);
} //是否回收完毕
bool _disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~RC4Crypt()
{
Dispose(false);
}
//这里的参数表示示是否需要释放那些实现IDisposable接口的托管对象
protected virtual void Dispose(bool disposing)
{
if (_disposed) return;//如果已经被回收,就中断执行
if (disposing)
{
//TODO:释放那些实现IDisposable接口的托管对象 }
//TODO:释放非托管资源,设置对象为null
S = null;
T = null;
K = null;
k = null;
_disposed = true;
}
}
}

c# rc4算法,加密解密类的更多相关文章

  1. PHP针对数字的加密解密类,可直接使用

    <?phpnamespace app;/** * 加密解密类 * 该算法仅支持加密数字.比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密. * @author 深秋的竹子 *  ...

  2. Java常用的加密解密类(对称加密类)

    Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...

  3. AES对称加密解密类

    import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...

  4. [C#] 常用工具类——加密解密类

    using System; using System.Configuration; using System.Collections.Generic; using System.Text; using ...

  5. 对接携程供应商php加密解密类

    php加密解密类 <?php class Aes{ private $key = '6b4d63211b4ba869'; private $iv = 'dbbf079b95004f65'; pu ...

  6. 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间

    生成二维码 /// <summary>/// 生成二维码/// </summary>public static class QRcodeUtils{private static ...

  7. java文本文件加密解密类

    原文:http://www.open-open.com/code/view/1420031154765 import java.awt.*; import java.awt.event.*; impo ...

  8. C#与Java互通AES算法加密解密

    /// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...

  9. .NET Core 使用RSA算法 加密/解密/签名/验证签名

    前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...

随机推荐

  1. 『转』The Beginning of your Design Career

    想想,如果明天我开始学日语,坚持到毕业,其实也可以日语入门了.所以机会都是抓住,当初,也就是去年的时候,我那个时候就开始坚持日语入门,想想现在应该可以开始N2了吧-所以...过去不去理会,现在开始继续 ...

  2. bootstrap与jQuery结合的动态进度条

    此款进度条实现的功能: 1.利用了bootstrap的进度条组件. a.在最外层的<div>中加入class .progress,在里层<div>加入class .progre ...

  3. .apply .call方法的区别及使用 .apply第二个参数为数组,.call第二个参数为参数列表, 相同点:第一个参数都为Function函数内部的this对象.

    Function.apply(obj,args)方法能接收两个参数 obj:这个对象将代替Function类里this对象 args:这个是数组,它将作为参数传给Function(args--> ...

  4. MongoDB_聚合

    MongoDB提供以下聚合工具来对数据进行操作:聚合框架.MapReduce以及几个简单聚合命令:count.distinct.group 聚合框架:可以使用多个构件创建一个管道,上一个构件的结果传给 ...

  5. 企业级任务调度框架Quartz(3) 一个简单的Quartz 例子

    1. 一个简单的Quartz 工程     本示例应用比起众所周知的 System.out.println("Hello world from Quartz") 来还是要有趣些.当 ...

  6. 指针FHQTreap

    不太友好的代码 题面依旧是普通平衡树 //Writer : Hsz %WJMZBMR%tourist%hzwer #include <bits/stdc++.h> #define LL l ...

  7. SpProcPool阅读笔记--1

    公司产品用了一个开源的框架,最近出了点问题,细看了这个框架. SpProcPool:  https://github.com/spsoft/spprocpool.git 我们的线程池用的是传递文件描述 ...

  8. BA-siemens-insight报警设置

    以0007001(DDC-B3-09)为例,介绍insight报警的设置方法:

  9. UVA 12124 UVAlive 3971 Assemble(二分 + 贪心)

    先从中找出性能最好的那个数, 在用钱比較少的去组合,能组出来就表明答案在mid的右边,反之在左边, #include<string.h> #include<map> #incl ...

  10. ClientProtocolException

    用httpclient 去訪问页面是会出现org.apache.http.client.ClientProtocolException 我这里出现的原因是在http请求时.请求头缺少user-agen ...