C#实现简易的加密、解密字符串工具类实例

本文实例讲述了C#实现简易的加密、解密字符串工具类。分享给大家供大家参考。具体如下:

这里的类CypherHelper是一个用于加密、解密字符串的工具类~~~,适合于方便地加密、解密长度较短的密码等字符串(C#里面已经有了库System.Security.Cryptography,对于比较长的字符串或流来说是一个更好的选择)

类CypherHelper代码:

class CypherHelper
{
 /// <summary>
 /// 加密字符串
 /// </summary>
 /// <param name="word">被加密字符串</param>
 /// <param name="key">密钥</param>
 /// <returns>加密后字符串</returns>
 public static string Encrypt(string word, string key)
 {
  if (!System.Text.RegularExpressions.Regex.IsMatch(key, "^[a-zA-Z]*$"))
  {
   throw new Exception("key 必须由字母组成");
  }
  key = key.ToLower();
  //逐个字符加密字符串
  char[] s = word.ToCharArray();
  for (int i = 0; i < s.Length; i++)
  {
   char a = word[i];
   char b = key[i % key.Length];
   s[i] = EncryptChar(a, b);
  }
  return new string(s);
 }
 /// <summary>
 /// 加密单个字符
 /// </summary>
 /// <param name="a">被加密字符</param>
 /// <param name="b">密钥</param>
 /// <returns>加密后字符</returns>
 private static char EncryptChar(char a, char b)
 {
  int c = a + b - 'a';
  if (a >= '0' && a <= '9') //字符0-9的转换
  {
   while (c > '9') c -= 10;
  }
  else if (a >= 'a' && a <= 'z') //字符a-z的转换
  {
   while (c > 'z') c -= 26;
  }
  else if (a >= 'A' && a <= 'Z') //字符A-Z的转换
  {
   while (c > 'Z') c -= 26;
  }
  else return a; //不再上面的范围内,不转换直接返回
  return (char)c; //返回转换后的字符
 }
 /// <summary>
 /// 解密字符串
 /// </summary>
 /// <param name="word">被解密字符串</param>
 /// <param name="key">密钥</param>
 /// <returns>解密后字符串</returns>
 public static string Decrypt(string word, string key)
 {
  if (!System.Text.RegularExpressions.Regex.IsMatch(key, "^[a-zA-Z]*$"))
  {
   throw new Exception("key 必须由字母组成");
  }
  key = key.ToLower();
  //逐个字符解密字符串
  char[] s = word.ToCharArray();
  for (int i = 0; i < s.Length; i++)
  {
   char a = word[i];
   char b = key[i % key.Length];
   s[i] = DecryptChar(a, b);
  }
  return new string(s);
 }
 /// <summary>
 /// 解密单个字符
 /// </summary>
 /// <param name="a">被解密字符</param>
 /// <param name="b">密钥</param>
 /// <returns>解密后字符</returns>
 private static char DecryptChar(char a, char b)
 {
  int c = a - b + 'a';
  if (a >= '0' && a <= '9') //字符0-9的转换
  {
   while (c < '0') c += 10;
  }
  else if (a >= 'a' && a <= 'z') //字符a-z的转换
  {
   while (c < 'a') c += 26;
  }
  else if (a >= 'A' && a <= 'Z') //字符A-Z的转换
  {
   while (c < 'A') c += 26;
  }
  else return a; //不再上面的范围内,不转换直接返回
  return (char)c; //返回转换后的字符
 }
}

Main函数调用示例

class Program
{
 static void Main(string[] args)
 {
  //1.加密
  string a = CypherHelper.Encrypt("TsybiusLee1234", "Galatea");
  Console.WriteLine("加密:TsybiusLee1234 → " + a);
  //2.解密
  string b = CypherHelper.Decrypt(a, "Galatea");
  Console.WriteLine("解密:" + a + " → " + b);
  Console.ReadLine();
 }
}

运行结果

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C#、.Net中把字符串(String)格式转换为DateTime类型的三种方法

    方式一:Convert.ToDateTime(string) 复制代码 代码如下: Convert.ToDateTime(string) 注意:string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方式二:Convert.ToDateTime(string, IFormatProvider) 复制代码 代码如下: DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo(); dtFormat

  • C#字符串的常用操作工具类代码分享

    实现以下功能: 验证字符串是否由正负号(+-).数字.小数点构成,并且最多只有一个小数点验证字符串是否仅由[0-9]构成验证字符串是否由字母和数字构成验证是否为空字符串.若无需裁切两端空格,建议直接使用 String.IsNullOrEmpty(string)裁切字符串(中文按照两个字符计算)裁切字符串(中文按照两个字符计算,裁切前会先过滤 Html 标签)过滤HTML标签获取字符串长度.与string.Length不同的是,该方法将中文作 2 个字符计算.将形如 10.1MB 格式对用户友好的

  • c#字符串值类型与引用类型比较示例

    复制代码 代码如下: classProgram{    staticvoid Main() {        int a = 9;    //给变量a赋值为9        int b = a;   //将a的副本给变量b        b = 10;        Console.WriteLine(string.Format("a={0},b={1}", a, b));        Person ZS = newPerson();       //张三        ZS.Age

  • C#实现实体类与字符串互相转换的方法

    本文实例讲述了C#实现实体类与字符串互相转换的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Text; namespace PackDLL.Data.ConvertData { /// <summary> /// 实体类.字符串互相转换 /// </summary> public class PackReflectionEntity<T> { //

  • 在C#及.NET框架中使用StringBuilder类操作字符串的技巧

    但如果性能的优劣很重要,则应该总是使用 StringBuilder 类来串联字符串.下面的代码使用 StringBuilder 类的 Append 方法来串联字符串,因此不会有 + 运算符的链接作用产生. class StringBuilderTest { static void Main() { string text = null; // Use StringBuilder for concatenation in tight loops. System.Text.StringBuilder

  • C#中使用强制类型实现字符串和ASCII码之间的转换

    C#貌似没有专门用于ASCII码转字符或字符转ASCII码的系统函数,所以小编这里就借用一下强制类型转换来实现ASCII码与字符之间的互转. 所谓的ASCII码,即American Standard Code for Information Interchange,美国信息互换标准代码的简写,它是基于拉丁字母的编码系统,也是当前最为通用的单字节编码系统.本文讲述在C#中如何实现字母或 数字等字符如何转换为ASCII编码,同时也可以将ASCII编码转换为字符. 一.将字符转换为ASCII码(数字)

  • C#实现的字符串相似度对比类

    本类适用于比较2个字符的相似度,代码如下: using System; using System.Collections.Generic; using System.Text; public class StringCompute { #region 私有变量 /// <summary> /// 字符串1 /// </summary> private char[] _ArrChar1; /// <summary> /// 字符串2 /// </summary>

  • C#实现将类的内容写成JSON格式字符串的方法

    本文实例讲述了C#实现将类的内容写成JSON格式字符串的方法.分享给大家供大家参考.具体如下: 本例中建立了Person类,赋值后将类中内容写入到字符串中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //需要引用 Newtonsoft.Js

  • C#生成不重复随机字符串类

    本文实例讲述了C#生成不重复随机字符串类.分享给大家供大家参考.具体如下: 这个C#类用于随机产生不重复的字符串,可以指定字符串范围,可以指定要产生字符串的长度 using System; namespace DotNet.Utilities { public class RandomOperate { // 一:随机生成不重复数字字符串 private int rep = 0; public string GenerateCheckCodeNum(int codeCount) { string

  • 非常实用的C#字符串操作处理类StringHelper.cs

    一个非常好的C#字符串操作处理类StringHelper.cs,具体内容如下 /// <summary> /// 类说明:Assistant /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:http://www.sufeinet.com/thread-655-1-1.html /// </summary> using System; using System.Collections.Generic; using System.Text; using

随机推荐