C#字符串使用密钥进行加解密

作者:lijiao 时间:2023-12-27 19:10:17 

第一个为大家分享的是C#字符串使用密钥进行加解密代码,具体内容如下


public class DesEncrypt
 {
   /// <summary>
   /// 算法偏移量
   /// </summary>
   const string m_IV = "12345678";

/// <summary>
   /// 功能描述:根据输入的密钥生成8位密钥
   /// 作者: 爱给模板网 2gei.cn
   /// 创建日期:2015-07-20 17:25:26
   /// </summary>
   /// <param name="strkey">strkey</param>
   /// <returns>8位密钥</returns>
   private static string GetKey(string strkey)
   {
     if (string.IsNullOrEmpty(strkey))
     {
       strkey = "InfoColl";
     }
     if (strkey.Length % 8 == 0)
     {
       return strkey;
     }
     else
     {
       return GetKey(strkey + "0");
     }
   }

/// <summary>
   /// 功能描述:加密字符串
   /// 作者: 爱给模板网 2gei.cn
   /// 创建日期:2015-07-20 17:18:31
   /// 任务编号:
   /// </summary>
   /// <param name="strSourceString">原字符串</param>
   /// <param name="strKey">密钥</param>
   /// <returns>加密后的字符串</returns>
   public static string Encrypt(string strSourceString, string strKey)
   {
     strKey = GetKey(strKey);
     byte[] btKey = Encoding.UTF8.GetBytes(strKey);

byte[] btIV = Encoding.UTF8.GetBytes(m_IV);

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

using (MemoryStream ms = new MemoryStream())
     {
       try
       {
         byte[] inData = Encoding.UTF8.GetBytes(strSourceString);
         using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
         {
           cs.Write(inData, 0, inData.Length);

cs.FlushFinalBlock();
         }

return Convert.ToBase64String(ms.ToArray());
       }
       catch
       {
         return strSourceString;
       }
     }
   }

/// <summary>
   /// 功能描述:解密字符串
   /// 作者: 爱给模板网 2gei.cn
   /// 创建日期:2015-07-20 17:18:49
   /// 任务编号:
   /// </summary>
   /// <param name="strEncryptedString">原字符串</param>
   /// <param name="strKey">密钥</param>
   /// <returns>解密后的字符串</returns>
   public static string Decrypt(string strEncryptedString, string strKey)
   {
     strKey = GetKey(strKey);
     byte[] btKey = Encoding.UTF8.GetBytes(strKey);

byte[] btIV = Encoding.UTF8.GetBytes(m_IV);

DESCryptoServiceProvider des = new DESCryptoServiceProvider();

using (MemoryStream ms = new MemoryStream())
     {
       try
       {
         byte[] inData = Convert.FromBase64String(strEncryptedString);
         using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
         {
           cs.Write(inData, 0, inData.Length);

cs.FlushFinalBlock();
         }

return Encoding.UTF8.GetString(ms.ToArray());
       }
       catch
       {
         return strEncryptedString;
       }
     }
   }
 }

C#字符串加密和解密


using System.Security.Cryptography;
using System.IO;
//默认密钥向量
   private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };

/// <summary>
   /// DES加密字符串
   /// </summary>
   /// <param name="encryptString">待加密的字符串</param>
   /// <param name="encryptKey">加密密钥,要求为8位</param>
   /// <returns>加密成功返回加密后的字符串,失败返回源串 </returns>
   public static string EncryptDES(string encryptString, string encryptKey)
   {
     try
     {
       byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));//转换为字节
       byte[] rgbIV = Keys;
       byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
       DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();//实例化数据加密标准
       MemoryStream mStream = new MemoryStream();//实例化内存流
       //将数据流链接到加密转换的流
       CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
       cStream.Write(inputByteArray, 0, inputByteArray.Length);
       cStream.FlushFinalBlock();
       return Convert.ToBase64String(mStream.ToArray());
     }
     catch
     {
       return encryptString;
     }
   }

/// <summary>
   /// DES解密字符串
   /// </summary>
   /// <param name="decryptString">待解密的字符串</param>
   /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
   /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
   public static string DecryptDES(string decryptString, string decryptKey)
   {
     try
     {
       byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
       byte[] rgbIV = Keys;
       byte[] inputByteArray = Convert.FromBase64String(decryptString);
       DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
       MemoryStream mStream = new MemoryStream();
       CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
       cStream.Write(inputByteArray, 0, inputByteArray.Length);
       cStream.FlushFinalBlock();
       return Encoding.UTF8.GetString(mStream.ToArray());
     }
     catch
     {
       return decryptString;
     }
   }

string EncryptStr = EncryptDESString.EncryptDES("aaaaaaaaaa", "ssssssss"); //返回加密后的字符串
     string DecryptStr = EncryptDESString.DecryptDES(EncryptStr, "ssssssss");//解密字符串

标签:C#,字符串,密钥,加密,解密
0
投稿

猜你喜欢

  • IntelliJ IDEA的代码搁置功能实现

    2022-03-28 07:32:52
  • C#设计模式实现之迭代器模式

    2023-05-31 19:21:58
  • MyBatis中映射文件的使用案例代码

    2021-09-02 23:55:41
  • java语法糖之jdk迭代的新特性汇总

    2022-07-09 10:05:19
  • redisson分布式限流RRateLimiter源码解析

    2021-05-29 13:10:15
  • Android编程中避免内存泄露的方法总结

    2023-07-27 19:32:50
  • Java正则多字符串匹配替换

    2021-12-16 02:24:48
  • C#调用Windows的API实现窗体动画

    2022-09-09 13:05:22
  • C#串口通信工具类的封装

    2023-11-23 11:19:54
  • java selenium 操作浏览器实例

    2023-04-13 17:57:13
  • ThreadLocal工作原理及用法案例

    2021-11-13 04:22:39
  • iOS获取AppIcon and LaunchImage's name(app图标和启动图片名字)

    2022-01-11 02:39:14
  • 深入剖析Java中String类的concat方法

    2023-06-02 07:07:13
  • Android嵌套滚动NestedScroll的实现了解一下

    2022-09-10 13:48:57
  • JVM类加载机制原理及用法解析

    2021-08-17 00:22:29
  • Flutter网络请求的3种简单实现方法

    2023-06-21 10:53:22
  • C# JWT权限验证的实现

    2022-11-24 00:57:13
  • C#飞行棋小程序设计分析

    2023-06-05 05:27:24
  • Seata 环境搭建部署过程

    2021-09-06 08:45:36
  • 深入学习Android ANR 的原理分析及解决办法

    2023-01-02 22:43:01
  • asp之家 软件编程 m.aspxhome.com