zoukankan      html  css  js  c++  java
  • 对称加密解密通用类库函数

    using System;
    using System.IO;
    using System.Text;
    using System.Security.Cryptography;

    namespace Common
    {
     /// <summary>
     /// 加密解密通用类库函数
     ///Copyright (C), 2004, kwklover(邝伟科)
     ///File name:Crypto.cs
     ///Author:邝伟科     Version:1.0        Date:2004年4月21日
     ///Description:可逆的通用对称加密解密函数集                         
     /// </summary>
     public class Crypto
     {
      private string _CryptText;  //待加密和解密的字符序列变量
      private byte[] _CryptKey;   //加密解密私钥变量
      private byte[] _CryptIV;    //加密解密初始化向量IV变量

      /// <summary>
      /// 待加密或解密的字符序列
      /// </summary>
      public string CryptText
      {
       set
       {
           _CryptText=value;
       }
       get
       {
          return _CryptText;
       }
      }

      /// <summary>
      /// 加密私钥
      /// </summary>
      public byte[] CryptKey
      {
       set
       {
           _CryptKey=value;
       }
       get
       {
           return _CryptKey;
       }
      }

      /// <summary>
      /// 加密的初始化向量IV
      /// </summary>
      public byte[] CryptIV
      {
       set
       {
           _CryptIV=value;
       }
       get
       {
           return _CryptIV;
       }
      }

      public Crypto()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }

      /// <summary>
      /// 加密函数,用于对字符串进行加密。需要提供相应的密钥和IV。
      /// </summary>
      /// <returns></returns>
      public string Encrypt()
      {
       string strEnText=CryptText;
       byte[] EnKey=CryptKey;
       byte[] EnIV=CryptIV;

       byte[] inputByteArray=System.Text.Encoding.UTF8.GetBytes(strEnText);

       //此处也可以创建其他的解密类实例,但注意不同(长度)的加密类要求不同的密钥Key和初始化向量IV
       RijndaelManaged RMCrypto = new RijndaelManaged();

       MemoryStream ms=new MemoryStream();
       CryptoStream cs=new CryptoStream(ms,RMCrypto.CreateEncryptor(EnKey,EnIV),CryptoStreamMode.Write);
       cs.Write(inputByteArray,0,inputByteArray.Length);
       cs.FlushFinalBlock();

       return Convert.ToBase64String(ms.ToArray());
      }

      /// <summary>
      /// 解密函数,用于经过加密的字符序列进行加密。需要提供相应的密钥和IV。
      /// </summary>
      /// <returns></returns>
      public string Decrypt()
      {
       string strDeText=CryptText;
       byte[] DeKey=CryptKey;
       byte[] DeIV=CryptIV;

          byte[] inputByteArray=Convert.FromBase64String(strDeText);

       //此处也可以创建其他的解密类实例,但注意不同的加密类要求不同(长度)的密钥Key和初始化向量IV
       RijndaelManaged RMCrypto = new RijndaelManaged();

       MemoryStream ms=new MemoryStream();
       CryptoStream cs=new CryptoStream(ms,RMCrypto.CreateDecryptor(DeKey,DeIV),CryptoStreamMode.Write);
       cs.Write(inputByteArray,0,inputByteArray.Length);
       cs.FlushFinalBlock();

       return System.Text.Encoding.UTF8.GetString(ms.ToArray());
      }
     }
    }

    下面使用上面类代码加密解密的一些部分数据,我本人无法对这些数据进行归纳为有价值的表达,望各位不吝赐教:

    加密前英文字母,数字长度范围 加密前中文字符长度范围 加密后长度大小
    0-15 0-5 24
    16-31 6-10 44
    32-47 11-15 64
    48-63 16-20 88
    64-79 21-15 108
    80-95 16-30 128
    96-111 31-35 152

  • 相关阅读:
    Angular 的性能优化
    通往架构师之路的三本书,高分!
    从单体架构到微服务架构的演化历程
    nginx 配置stream模块代理并开启日志配置
    UnixLinux 执行 shell 报错:“$' ': 未找到命令” 的解决办法
    红胖子(红模仿)的博文大全:开发技术集合大版本更新v4.0.0
    案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出exce、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)
    字符编码和字符集到底有什么区别?Unicode和UTF-8是什么关系?
    Linux从头学15:【页目录和页表】-理论 + 实例 + 图文的最完全、最接地气详解
    【分页机制】-看了这篇文章还没彻底搞懂?我自罚三杯!
  • 原文地址:https://www.cnblogs.com/kwklover/p/17814.html
Copyright © 2011-2022 走看看