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 ...
随机推荐
- tomcat-manager 设置
tomcat默认是没有用户登录控制的,需要登录manager,则需要配置角色与用户 1. 在conf/tomcat-users.xml中添加 <role rolename="manag ...
- Bash中文速查表
最好用的中文速查表(Cheatsheet) 来源:https://github.com/skywind3000/awesome-cheatsheets 感谢网友们的贡献! ############## ...
- [luogu1600 noip2016] 天天爱跑步 (树上差分)
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵 ...
- 2018 MAC下安装Redis和Redis可视化工具RDM并连接Redis
实验环境:一台mac V:10.13.6 一.安装redis brew install redis 二.安装RDM 直接下载安装rdm dmg文件 链接: https://pan.baidu.com/ ...
- 2015 Multi-University Training Contest 10 hdu 5412 CRB and Queries
CRB and Queries Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- Class example in C/C++
class Player { private: int health; //these are the attributes int strength; int agility; pu ...
- Android适屏
总结一下自己的适屏经验,仅仅希望自己不断进步,不断完好,假设有热心肠的"前辈"指导一下,不胜感激! Android5.0已经出来了,说是这个版本号对Android屏幕适配做了非常多 ...
- ZooKeeper分布式集群部署及问题
ZooKeeper为分布式应用系统提供了高性能服务,在许多常见的集群服务中被广泛使用,最常见的当属HBase集群了,其他的还有Solr集群.Hadoop-2中的HA自己主动故障转移等. 本文主要介绍了 ...
- spark中的广播变量broadcast
Spark中的Broadcast处理 首先先来看一看broadcast的使用代码: val values = List[Int](1,2,3) val broadcastValues = sparkC ...
- Android顶部粘至视图具体解释
不知从某某时间開始,这样的效果開始在UI设计中流行起来了.让我们先来看看效果: 大家在支付宝.美团等非常多App中都有使用.要实现这个效果,我们能够来分析下思路: 我们肯定要用2个一样的布局来显示我们 ...