zoukankan      html  css  js  c++  java
  • .Net 常用加密算法类

    .Net框架由于拥有CLR提供的丰富库支持,只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法。本类实现一些常用机密算法,供参考。其中MD5算法返回Int的ToString字串。返回数字字母型结果的算法参见之前Blog文章。

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

    namespace com.Quickline.Encrypt
    {
     /// <summary>
     /// 类名:HashEncrypt
     /// 作用:对传入的字符串进行Hash运算,返回通过Hash算法加密过的字串。
     /// 属性:[无]
     /// 构造函数额参数:
     /// IsReturnNum:是否返回为加密后字符的Byte代码
     /// IsCaseSensitive:是否区分大小写。
     /// 方法:此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长
    度依次增大。
     /// </summary>
     public class HashEncrypt
     {
      //private string strIN;
      private bool isReturnNum;
      private bool isCaseSensitive;
      
      public HashEncrypt(bool IsCaseSensitive,bool IsReturnNum)
      {
       this.isReturnNum = IsReturnNum;
       this.isCaseSensitive = IsCaseSensitive;
      }
      
      
      private string getstrIN(string strIN)
      {
       //string strIN = strIN;
       if (strIN.Length == 0)
       {
        strIN = "~NULL~";
       }
       if (isCaseSensitive == false)
       {
        strIN = strIN.ToUpper();
       }
       return strIN;
      }
      public string MD5Encrypt(string strIN)
      {
       //string strIN = getstrIN(strIN);
       byte[] tmpByte;
       MD5 md5 = new MD5CryptoServiceProvider();
       tmpByte =
    md5.ComputeHash(GetKeyByteArray(getstrIN(strIN)));
       md5.Clear();

       return GetStringValue(tmpByte);

      }
      
      public string SHA1Encrypt(string strIN)
      {
       //string strIN = getstrIN(strIN);
       byte[] tmpByte;
       SHA1 sha1 = new SHA1CryptoServiceProvider();

       tmpByte = sha1.ComputeHash(GetKeyByteArray(strIN));
       sha1.Clear();

       return GetStringValue(tmpByte);

      }

      public string SHA256Encrypt(string strIN)
      {
       //string strIN = getstrIN(strIN);
       byte[] tmpByte;
       SHA256 sha256 = new SHA256Managed();

       tmpByte =
    sha256.ComputeHash(GetKeyByteArray(strIN));
       sha256.Clear();

       return GetStringValue(tmpByte);

      }

      public string SHA512Encrypt(string strIN)
      {
       //string strIN = getstrIN(strIN);
       byte[] tmpByte;
       SHA512 sha512 = new SHA512Managed();

       tmpByte =
    sha512.ComputeHash(GetKeyByteArray(strIN));
       sha512.Clear();

       return GetStringValue(tmpByte);

      }
      
      /// <summary>
      /// 使用DES加密(Added by niehl 2005-4-6)
      /// </summary>
      /// <param name="originalValue">待加密的字符串</param>
      /// <param name="key">密钥(最大长度8)</param>
      /// <param name="IV">初始化向量(最大长度8)</param>
      /// <returns>加密后的字符串</returns>
      public string DESEncrypt(string originalValue,string key,string IV)
      {
       //将key和IV处理成8个字符
       key += "12345678";
       IV += "12345678";
       key = key.Substring(0,8);
       IV = IV.Substring(0,8);

       SymmetricAlgorithm sa;
       ICryptoTransform ct;
       MemoryStream ms;
       CryptoStream cs;
       byte[] byt;

       sa = new DESCryptoServiceProvider();
       sa.Key = Encoding.UTF8.GetBytes(key);
       sa.IV = Encoding.UTF8.GetBytes(IV);
       ct = sa.CreateEncryptor();

       byt = Encoding.UTF8.GetBytes(originalValue);

       ms = new MemoryStream();
       cs = new CryptoStream(ms, ct,
    CryptoStreamMode.Write);
       cs.Write(byt, 0, byt.Length);
       cs.FlushFinalBlock();

       cs.Close();

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

      }

      public string DESEncrypt(string originalValue,string key)
      {
       return DESEncrypt(originalValue,key,key);
      }

      /// <summary>
      /// 使用DES解密(Added by niehl 2005-4-6)
      /// </summary>
      /// <param name="encryptedValue">待解密的字符串</param>
      /// <param name="key">密钥(最大长度8)</param>
      /// <param name="IV">m初始化向量(最大长度8)</param>
      /// <returns>解密后的字符串</returns>
      public string DESDecrypt(string encryptedValue,string key,string IV)
      {
       //将key和IV处理成8个字符
       key += "12345678";
       IV += "12345678";
       key = key.Substring(0,8);
       IV = IV.Substring(0,8);

       SymmetricAlgorithm sa;
       ICryptoTransform ct;
       MemoryStream ms;
       CryptoStream cs;
       byte[] byt;

       sa = new DESCryptoServiceProvider();
       sa.Key = Encoding.UTF8.GetBytes(key);
       sa.IV = Encoding.UTF8.GetBytes(IV);
       ct = sa.CreateDecryptor();

       byt = Convert.FromBase64String(encryptedValue);

       ms = new MemoryStream();
       cs = new CryptoStream(ms, ct,
    CryptoStreamMode.Write);
       cs.Write(byt, 0, byt.Length);
       cs.FlushFinalBlock();

       cs.Close();

       return Encoding.UTF8.GetString(ms.ToArray());

      }

      public string DESDecrypt(string encryptedValue,string key)
      {
       return DESDecrypt(encryptedValue,key,key);
      }

      private string GetStringValue(byte[] Byte)
      {
       string tmpString = "";

       if (this.isReturnNum == false)
       {
        ASCIIEncoding Asc = new ASCIIEncoding();
        tmpString = Asc.GetString(Byte);
       }
       else
       {
        int iCounter;

        for
    (iCounter=0;iCounter<Byte.Length;iCounter++)
        {
         tmpString = tmpString +
    Byte[iCounter].ToString();
        }
        
       }
       
       return tmpString;
      }

      private byte[] GetKeyByteArray(string strKey)
      {

       ASCIIEncoding Asc = new ASCIIEncoding();
       
       int tmpStrLen = strKey.Length;
       byte[] tmpByte = new byte[tmpStrLen-1];

       tmpByte = Asc.GetBytes(strKey);

       return tmpByte;

      }

     }
    }

  • 相关阅读:
    Git的分支的clone、提交及删除
    Linux查找整个目录下包含关键词的文件并全局替换文件内容
    解决Mysql group_concat长度限制
    SQLSERVER建立MYSQL连接服务器
    批处理创建文件夹
    表分区常用脚本
    添加别名的重要性
    floor相关
    T-SQL 小数点转换百分数
    开启MSDTC
  • 原文地址:https://www.cnblogs.com/studio313/p/264494.html
Copyright © 2011-2022 走看看