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 ...
随机推荐
- 『MicroPython』Hello uPy
官网买了几乎全套.一路曲折:7月10号下单,13号发货,14号法兰克福过关,23号到北京,25号到上海,27号到沪C:沪C邮局投3次未果,中彩票一样终于打通了投递部电话才在次日28号“妥投”:又因出差 ...
- Js判断一个字符串是否包含一个子串
Js中经常遇到判断一个字符串是否包含一个子串,java语言中有containes的方法,直接调用就可以了.除非引用第三方数据库,Js中没有contains方法. 为了实现更java语言中contain ...
- 动态规划——Buyer
题目链接 题目描述 哆啦A梦班级举办个party,当然吃的东西必不可少,哆啦A梦负责采购任务,他得到了一份清单,上面注明不同食品的受欢迎程度,哆啦A梦需要用一定的价钱尽可能达到的更大的受欢迎程度!例如 ...
- 完全二叉树(Complete Binary Tree)
Date:2019-03-25 19:36:45 判断一棵树是否为完全二叉树 #include <queue> using namespace std; void IsComplete(n ...
- 序列模型(4)----门控循环单元(GRU)
一.GRU 其中, rt表示重置门,zt表示更新门. 重置门决定是否将之前的状态忘记.(作用相当于合并了 LSTM 中的遗忘门和传入门) 当rt趋于0的时候,前一个时刻的状态信息ht−1会被忘掉,隐藏 ...
- UNIX时间转换ASP代码.txt
'参数:strTime:要转换的时 间:intTimeZone:该时间对应的时区 '返回值:strTime相对于1970年1月1日午夜0点经过的秒数 '示例:ToUnixTime("2008 ...
- CentOS 笔记(五) 常用工具
远程 :XShell6 ,PuTTy FPT:Xfpt ,pscp.exe
- 端到端图片识别 Python实现 Tensorflow
基于python语言的tensorflow的‘端到端’的字符型验证码识别 1 Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的 ...
- 服务器重启后启动Docker命令
启动步骤: 1.启动Docker 守护进程 systemctl daemon-reload 2.Docker启动命令: systemctl start docker 3.查看docker服务是否启动 ...
- Jenkins持续构建打包后端服务流程详解
背景运用场景及思路 1.为响应后端开发人员需求,提升项目开发过程效率,选择Jenkins持续构建,进行导包启动一键持续集成 思路: 使用jenkins自带,立即构建->SVN拉取代码,通过Jen ...