c# rc4算法,加密解密类
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算法,加密解密类的更多相关文章
- PHP针对数字的加密解密类,可直接使用
<?phpnamespace app;/** * 加密解密类 * 该算法仅支持加密数字.比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密. * @author 深秋的竹子 * ...
- Java常用的加密解密类(对称加密类)
Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...
- AES对称加密解密类
import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...
- [C#] 常用工具类——加密解密类
using System; using System.Configuration; using System.Collections.Generic; using System.Text; using ...
- 对接携程供应商php加密解密类
php加密解密类 <?php class Aes{ private $key = '6b4d63211b4ba869'; private $iv = 'dbbf079b95004f65'; pu ...
- 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间
生成二维码 /// <summary>/// 生成二维码/// </summary>public static class QRcodeUtils{private static ...
- java文本文件加密解密类
原文:http://www.open-open.com/code/view/1420031154765 import java.awt.*; import java.awt.event.*; impo ...
- C#与Java互通AES算法加密解密
/// <summary>AES加密</summary> /// <param name="text">明文</param> /// ...
- .NET Core 使用RSA算法 加密/解密/签名/验证签名
前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...
随机推荐
- uva 1658 Admiral 【 最小费用最大流 】
拆点,每个点拆成 i,i' 在i 和i‘之间连一条费用为0,容量为1的边,就可以保证每个点只经过一次 特殊的点,1和n之间,,,n和2*n之间连一条费用为0,容量为2的边,可以求出两条路径 #incl ...
- ES : 软件工程学的复杂度理论及物理学解释
系统论里面总是有一些通用的专业术语 比如复杂度.熵.焓,复杂度专门独立出来,成为复杂度理论 文章摘抄于:<非线性动力学> 刘秉政 编著 5.5 复杂性及其测度 热力学的几个专业术语 熵. ...
- js预览上传图片
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- Java中数组的概念与特点
数组概念: 数组其实也是一个容器,可以用来存储固定个数相同类型的数据数组的定义 数组中存储的数据叫做元素 特点: 1.数组是引用数据类型 2.数组的长度是固定的,也就是说可以存储固定个数的数据 3.数 ...
- UWP添加数字证书导出安装包本地安装
先生成一个简单的HelloWorld应用程序 <Page x:Class="HelloWorld.MainPage" xmlns="http://schemas.m ...
- codeforce 788 A. Funtions again
链接 A. Functions again 题意 这是一道求最大连续子序列和变形题. 做法 先将abs(a[i+1]-a[i]算出来,然后用两个数组dp[i],cp[i],dp维护其最大值,cp维护其 ...
- JS 20180415作业
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PHP中调用Soap/WebService
关于在PHP中如何调用Soap/WebService的描述,网络上有不少帖子.但是主要讲述了如何用PHP开发服务器端.客户端并加以关联,而很少触及在PHP中调用现成的WebService的情况.在本文 ...
- k8s的概念
Kubernetes(简称为 K8s),最初由 Google 的工程师开发和设计.Kubernetes 是用于自动部署.扩展和管理容器化应用程序的开源系统,它旨在提供跨主机集群的自动部署.扩展以及运行 ...
- PHP开发过程中数组汇总 [ 持续更新系列 ]
开发过程中经常会使用到数组函数,故特地总结出来,自己熟悉,同时供大家参考!(实例部分会抽空尽快完成) 一.目录 array_merge(); 合并数组 array_keys(); array_filt ...