完整代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;namespace RC.Web.Utility
{/// <summary>/// Rc4加密 解密工具类/// </summary>public class RC4Crypto {#region 构造器/// <summary>/// 无参构造器/// </summary>public RC4Crypto(){this.Key = "123456";this.encoding = Encoding.Default;this.encoderMode = EncoderMode.Base64Encoder;}#endregion#region 属性/// <summary>/// 密钥/// </summary>public string Key { get; set; }/// <summary>/// 编码/// </summary>public Encoding encoding { get; set; }/// <summary>/// 编码模式/// </summary>public EncoderMode encoderMode { get; set; }/// <summary>/// 实例方法/// </summary>public static RC4Crypto RC4 { get { return new RC4Crypto(); } }#endregion#region 方法/// <summary>/// 编码模式/// </summary>public enum EncoderMode{/// <summary>/// Base64模式/// </summary>Base64Encoder,/// <summary>/// 16进制模式/// </summary>HexEncoder}/// <summary>/// 加密/// </summary>/// <param name="data">明文</param>/// <returns></returns>public String Encrypt(String data){return this.Encrypt(data, this.Key, this.encoderMode);}/// <summary>/// 带编码模式的字符串加密/// </summary>/// <param name="data">要加密的数据</param>/// <param name="key">密码</param>/// <param name="em">编码模式</param>/// <returns>加密后经过编码的字符串</returns>public String Encrypt(String data, String key, EncoderMode em = EncoderMode.Base64Encoder){if (data.IsNullOrEmpty()) return "";if (key.IsNullOrEmpty()) key = this.Key;if (em == EncoderMode.Base64Encoder)return Convert.ToBase64String(this.Encrypt(data.GetBytes(this.encoding), key));elsereturn this.ByteToHex(this.Encrypt(data.GetBytes(this.encoding), key));}/// <summary>/// 解密/// </summary>/// <param name="data">密文</param>/// <returns></returns>public String Decrypt(String data){return this.Decrypt(data, this.Key, this.encoderMode);}/// <summary>/// 带编码模式的字符串解密/// </summary>/// <param name="data">要解密的数据</param>/// <param name="key">密码</param>/// <param name="em">编码模式</param>/// <returns>明文</returns>public String Decrypt(String data, String key, EncoderMode em){if (data.IsNullOrEmpty()) return "";if (key.IsNullOrEmpty()) key = this.Key;if (em == EncoderMode.Base64Encoder)return this.encoding.GetString(this.Decrypt(Convert.FromBase64String(data), key));elsereturn this.encoding.GetString(this.Decrypt(this.HexToByte(data), key));}/// <summary>/// 加密/// </summary>/// <param name="data">要加密的数据</param>/// <param name="key">密码</param>/// <returns>加密后经过默认编码的字符串</returns>public String Encrypt(String data, String key){return this.Encrypt(data, key, this.encoderMode);}/// <summary>/// 解密/// </summary>/// <param name="data">要解密的经过编码的数据</param>/// <param name="key">密码</param>/// <returns>明文</returns>public String Decrypt(String data, String key){return this.Decrypt(data, key, this.encoderMode);}/// <summary>/// 16进制转换字节/// </summary>/// <param name="hex">字符串</param>/// <returns></returns>private Byte[] HexToByte(String hex){Int32 iLen = hex.Length;if (iLen <= 0 || 0 != iLen % 2){return null;}Int32 dwCount = iLen / 2;UInt32 tmp1, tmp2;Byte[] pbBuffer = new Byte[dwCount];for (Int32 i = 0; i < dwCount; i++){tmp1 = (UInt32)hex[i * 2] - (((UInt32)hex[i * 2] >= (UInt32)'A') ? (UInt32)'A' - 10 : (UInt32)'0');if (tmp1 >= 16) return null;tmp2 = (UInt32)hex[i * 2 + 1] - (((UInt32)hex[i * 2 + 1] >= (UInt32)'A') ? (UInt32)'A' - 10 : (UInt32)'0');if (tmp2 >= 16) return null;pbBuffer[i] = (Byte)(tmp1 * 16 + tmp2);}return pbBuffer;}/// <summary>/// 字节转换16进制/// </summary>/// <param name="bytes">字节</param>/// <returns></returns>private String ByteToHex(Byte[] bytes){if (bytes == null || bytes.Length < 1) return null;StringBuilder sbr = new StringBuilder(bytes.Length * 2);for (int i = 0; i < bytes.Length; i++){if ((UInt32)bytes[i] < 0) return null;UInt32 k = (UInt32)bytes[i] / 16;sbr.Append((Char)(k + ((k > 9) ? 'A' - 10 : '0')));k = (UInt32)bytes[i] % 16;sbr.Append((Char)(k + ((k > 9) ? 'A' - 10 : '0')));}return sbr.ToString();}/// <summary>/// 加密字节/// </summary>/// <param name="data">节字</param>/// <param name="key">key</param>/// <returns></returns>private Byte[] Encrypt(Byte[] data, string key){if (data == null || key == null) return null;Byte[] output = new Byte[data.Length];Int64 i = 0;Int64 j = 0;Byte[] mBox = GetKey(key.GetBytes(this.encoding), 256);for (Int64 offset = 0; offset < data.Length; offset++){i = (i + 1) % mBox.Length;j = (j + mBox[i]) % mBox.Length;Byte temp = mBox[i];mBox[i] = mBox[j];mBox[j] = temp;Byte a = data[offset];Byte b = mBox[(mBox[i] + mBox[j]) % mBox.Length];output[offset] = (Byte)((Int32)a ^ (Int32)b);}return output;}/// <summary>/// 解密字节/// </summary>/// <param name="data">字节</param>/// <param name="key">key</param>/// <returns></returns>private Byte[] Decrypt(Byte[] data, String key){return Encrypt(data, key);}/// <summary>/// 打乱密码/// </summary>/// <param name="pass">密码</param>/// <param name="kLen">密码箱长度</param>/// <returns>打乱后的密码</returns>private Byte[] GetKey(Byte[] pass, Int32 kLen){Byte[] mBox = new Byte[kLen];for (Int64 i = 0; i < kLen; i++){mBox[i] = (Byte)i;}Int64 j = 0;for (Int64 i = 0; i < kLen; i++){j = (j + mBox[i] + pass[i % pass.Length]) % kLen;Byte temp = mBox[i];mBox[i] = mBox[j];mBox[j] = temp;}return mBox;}#endregion}/// <summary>/// Rc4  扩展方法/// </summary>public static class Rc4Extend {/// <summary>/// 字符串转数据流/// </summary>/// <param name="str"></param>/// <param name="en"></param>/// <returns></returns>public static byte[] GetBytes(this string str, Encoding en) {return en.GetBytes(str);}}
}

C# RC4加密,解密算法相关推荐

  1. RC4加密解密算法原理及实现对文件的加解密

    本文简单实现了RC4算法对于文件的加解密,并已经验证成功.同时实现了对RC4算法加解密较大文件的测速 RC4加密解密算法的原理: 首先,通过我的理解,RC4算法所依赖的最根本原理是:对明文使用同一个密 ...

  2. java rc4_java实现的RC4加密解密算法示例

    本文实例讲述了java实现的RC4加密解密算法.分享给大家供大家参考,具体如下: 有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个Java 版本的RC4加解密算法. publi ...

  3. RC4加密解密算法123

           RC4是一种对称密码算法,它属于对称密码算法中的序列密码(streamcipher,也称为流密码),它是可变密钥长度,面向字节操作的流密码. RC4是流密码streamcipher中的一 ...

  4. 基于JAVA的RC4加密解密算法循环实现

    RC4算法是一种对称加密算法,所谓对称加密,就是加密和解密的过程是一样的,加密和解密均采用同一把密钥.RC4算法的特点是算法简单,执行速度快安全性比较高并且密钥长度是可变的,可变范围为1-256字节( ...

  5. java实现rc4密码_java实现RC4加密解密的实例教程

    这篇文章主要介绍了java实现的RC4加密解密算法,结合具体实例形式分析了java RC4加密解密算法的实现与使用技巧,需要的朋友可以参考下 本文实例讲述了java实现的RC4加密解密算法.分享给大家 ...

  6. RC4加密解密java算法

    有一个项目,需要解析一个用户提供的rc4加密后的文件,特意搜索整理了一个java 版本的RC4加解密算法. public static String HloveyRC4(String aInput,S ...

  7. php+rc4+加密算法,加密解密算法之RC4

    RC4加密算法是一种对称加密算法.所谓对称加密算法,说得直白一点,就是加密与解密的过程一模一样.假设定义RC4的运算过程是rc4(key,data),那么,密文=rc4(key,明文),明文=rc4( ...

  8. 现代密码学实验2 RC4加/解密算法

    赞赏码 & 联系方式 & 个人闲话 [实验名称]RC4加/解密算法 [实验目的] 1.理解流密码的概念及相关结构: 2.理解并能够编写基本的流密码体制: 3.熟练应用一种编程语言实现R ...

  9. 提供一个基于.NET的加密/解密算法

    提供一个基于.NET SymmetricAlgorithm 类的.带私钥的加密/解密算法的包装类.使用方法: symmcrypto de = new SymmCrypto(SymmCrypto.Sym ...

  10. C#的加密解密算法,包括Silverlight的MD5算法

    C#的加密解密算法,包括Silverlight的MD5算法 下面是一段加密解密工具类,其中的WinFormMD5Encrypt方法可以使得Winform和WebForm下的MD5加密结果一致,默认他们 ...

最新文章

  1. 科学计算机要用的电池是几号,科学计算器的常识及注意事项
  2. 设置virgo-tomcat-server的JVM内存
  3. 使用cl_htmlb_manager获得用户输入
  4. 使用Redis set 解决数据的唯一性问题
  5. 代理管家app_亲亲小保社保管家app2021下载_亲亲小保社保管家app最新版下载
  6. LeetCode 1218. 最长定差子序列(哈希map)
  7. (转) 各种好用的插件 Xcode
  8. [转]Effective C# 原则7: 选择恒定的原子值类型数据
  9. Java全能手册火了!Redis/Nginx/Dubbo/Spring全家桶/高并发
  10. 190702每日一句 孤独之前是迷茫,孤独之后是成长
  11. Mendeley简单操作
  12. 2017数学建模B题回顾与解题分享
  13. 基于QT实现的旅游路线查询系统
  14. npm查看依赖包报错:npm ERR! extraneous解决!!
  15. 【166】VS2022调试通过海康人脸抓拍SDK的C++代码
  16. rsync不覆盖已经存在文件的方法
  17. openwrt固件的下载编译流程
  18. 十分钟带汝入门大数据开发语言Scala
  19. web服务器部署证书
  20. 猿创征文|基于Java+SpringBoot+vue学生学习平台详细设计实现

热门文章

  1. 内蒙古大学计算机调剂2021,内蒙古大学2021年硕士研究生招生调剂方案
  2. Android的webview支持HTML5的离线应用功能
  3. weex android 简书,weex打包Android和IOS
  4. 日语二级考试题型与分值分配
  5. Vdbench工具的安装及使用
  6. pdmreader 连接mysql_powerdesigner连接mysql,并导出其数据模型的方法
  7. 【MATLAB】全局莫兰指数(含p值和z值)
  8. 【学一点英飞凌】AutoSar-MCAL-Gtm-TOM模块
  9. linux下安卓逆向工具,Android逆向工具:Androguard(一)
  10. UVa 10003Cutting Sticks