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

  • 相关阅读:
    python 列表 字典的操作补充
    RPC远程过程调用
    python-迭代器 生成器 可迭代对象
    Semaphore源码分析
    CyclicBarrier源码分析
    CountDownLatch源码分析
    ReentrantLock源码分析
    AQS源码分析
    Mac下使用Clion调试MySQL源码配置流程
    hooks版本的pureComponent
  • 原文地址:https://www.cnblogs.com/kwklover/p/17814.html
Copyright © 2011-2022 走看看