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

  1. /*
  2. * 由SharpDevelop创建。
  3. * 用户: YISH
  4. * 日期: 04/04/2015
  5. * 时间: 03:01
  6. *
  7. * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
  8. */
  9. using System;
  10.  
  11. namespace Libraries
  12. {
  13. /// <summary>
  14. /// Description of CryptoGraphy.
  15. /// </summary>
  16. public class RC4Crypt:IDisposable{
  17. byte[] S;
  18. byte[] T;
  19. byte[] K;
  20. byte[] k;
  21. public RC4Crypt() { }
  22. public RC4Crypt(byte[] key){
  23. this.K=key;
  24. }
  25. public byte[] Key
  26. {
  27. get
  28. {
  29. return K;
  30. }
  31. set
  32. {
  33. K = value;
  34. }
  35. }
  36. //初始化状态向量S和临时向量T,供keyStream方法调用
  37. void initial(){
  38. if (S == null || T == null)
  39. {
  40. S = new byte[];
  41. T = new byte[];
  42. }
  43. for (int i = ; i < ; ++i) {
  44. S[i]=(byte)i;
  45. T[i] = K[i % K.Length];
  46. }
  47. }
  48. //初始排列状态向量S,供keyStream方法调用
  49. void ranges(){
  50. int j=;
  51. for (int i = ; i < ; ++i) {
  52. j=(j+S[i]+T[i])&0xff;
  53. S[i]=(byte)((S[i]+S[j])&0xff);
  54. S[j]=(byte)((S[i]-S[j])&0xff);
  55. S[i]=(byte)((S[i]-S[j])&0xff);
  56. }
  57. }
  58. //生成密钥流
  59. //len:明文为len个字节
  60. void keyStream(int len){
  61. initial();
  62. ranges();
  63. int i=,j=,t=;
  64. k=new byte[len];
  65. for (int r = ; r < len; r++) {
  66. i=(i+)&0xff;
  67. j=(j+S[i])&0xff;
  68.  
  69. S[i]=(byte)((S[i]+S[j])&0xff);
  70. S[j]=(byte)((S[i]-S[j])&0xff);
  71. S[i]=(byte)((S[i]-S[j])&0xff);
  72.  
  73. t=(S[i]+S[j])&0xff;
  74. k[r]=S[t];
  75. }
  76. }
  77.  
  78. public byte[] EncryptByte(byte[] data){
  79. //生产密匙流
  80. keyStream(data.Length);
  81. for (int i = ; i < data.Length; i++) {
  82. k[i]=(byte)(data[i]^k[i]);
  83. }
  84. return k;
  85. }
  86.  
  87. public byte[] DecryptByte(byte[] data){
  88. return EncryptByte(data);
  89. }
  90.  
  91. //是否回收完毕
  92. bool _disposed;
  93. public void Dispose()
  94. {
  95. Dispose(true);
  96. GC.SuppressFinalize(this);
  97. }
  98. ~RC4Crypt()
  99. {
  100. Dispose(false);
  101. }
  102. //这里的参数表示示是否需要释放那些实现IDisposable接口的托管对象
  103. protected virtual void Dispose(bool disposing)
  104. {
  105. if (_disposed) return;//如果已经被回收,就中断执行
  106. if (disposing)
  107. {
  108. //TODO:释放那些实现IDisposable接口的托管对象
  109.  
  110. }
  111. //TODO:释放非托管资源,设置对象为null
  112. S = null;
  113. T = null;
  114. K = null;
  115. k = null;
  116. _disposed = true;
  117. }
  118. }
  119. }

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. tomcat-manager 设置

    tomcat默认是没有用户登录控制的,需要登录manager,则需要配置角色与用户 1. 在conf/tomcat-users.xml中添加 <role rolename="manag ...

  2. Bash中文速查表

    最好用的中文速查表(Cheatsheet) 来源:https://github.com/skywind3000/awesome-cheatsheets 感谢网友们的贡献! ############## ...

  3. [luogu1600 noip2016] 天天爱跑步 (树上差分)

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵 ...

  4. 2018 MAC下安装Redis和Redis可视化工具RDM并连接Redis

    实验环境:一台mac V:10.13.6 一.安装redis brew install redis 二.安装RDM 直接下载安装rdm dmg文件 链接: https://pan.baidu.com/ ...

  5. 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 ...

  6. Class example in C/C++

    class Player {  private:   int health; //these are the attributes   int strength;   int agility;  pu ...

  7. Android适屏

    总结一下自己的适屏经验,仅仅希望自己不断进步,不断完好,假设有热心肠的"前辈"指导一下,不胜感激! Android5.0已经出来了,说是这个版本号对Android屏幕适配做了非常多 ...

  8. ZooKeeper分布式集群部署及问题

    ZooKeeper为分布式应用系统提供了高性能服务,在许多常见的集群服务中被广泛使用,最常见的当属HBase集群了,其他的还有Solr集群.Hadoop-2中的HA自己主动故障转移等. 本文主要介绍了 ...

  9. spark中的广播变量broadcast

    Spark中的Broadcast处理 首先先来看一看broadcast的使用代码: val values = List[Int](1,2,3) val broadcastValues = sparkC ...

  10. Android顶部粘至视图具体解释

    不知从某某时间開始,这样的效果開始在UI设计中流行起来了.让我们先来看看效果: 大家在支付宝.美团等非常多App中都有使用.要实现这个效果,我们能够来分析下思路: 我们肯定要用2个一样的布局来显示我们 ...