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. JVM上的下一个Java——Scala

    Scala是一种针对 JVM 将函数和面向对象技术组合在一起的编程语言.Scala编程语言近来抓住了很多开发者的眼球.它看起来像是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格. ...

  2. QT与openCV,与PCL结合!

    (1):详解QT多媒体框架:给予视频播放器 原文链接:http://mobile.51cto.com/symbian-271123.htm 对于使用主框架的QT程序,实现Qimage的转换可借鉴下面程 ...

  3. trigger事件就是继承某一个类的事件.

    <html><head><script type="text/javascript" src="/jquery/jquery.js" ...

  4. MongoDB_pymongo

    python使用pymongo访问MongoDB的基本操作 安装pymongo: pip install pymongo from pymongo import MongoClient import ...

  5. SQL数据查询2

    USE h CREATE TABLE zy1( empno INT, ename ), job ), mgr INT, hiredate DATE, sal DOUBLE, COOM DOUBLE, ...

  6. jquery-ui实现拖拽功能

    https://www.runoob.com/jqueryui/jqueryui-tutorial.html

  7. 网络教程(12) TCP协议

    IP协议的限制 IP协议需要 datalink帧来包装它 Ethernet或者PPP 一般都有1500byte字节或者大小的限制 可能会出现的问题 Packet loss – retransmit R ...

  8. Project Euler 47 Distinct primes factors( 筛法记录不同素因子个数 )

    题意: 首次出现连续两个数均有两个不同的质因数是在: 14 = 2 × 715 = 3 × 5 首次出现连续三个数均有三个不同的质因数是在: 644 = 22 × 7 × 23645 = 3 × 5 ...

  9. [TJOI2008]彩灯

    线性基裸题,求最大线性无关组. 注意:1ll<<i #include <cstdio> int n,m; const int mod=2008; long long b[64] ...

  10. ThinkPHP3.1.3分表状态时候的自动验证的代码BUG

    问题描述 ThinkPHP3.1.3 当使用TP的分库分表后 有些地方需要使用Model自动验证create,当验证唯一性unique会出现BUG, 具体描述 因为自动验证检测唯一性会使用隐式的使用f ...