• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    .Net 常用加密算法類

    發布: 2007-6-13 16:16 | 作者: 網絡轉載 | 來源: 網絡 | 查看: 147次 | 進入軟件測試論壇討論

    領測軟件測試網
    .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;

      }

     }
    }

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: net 常用 加密 算法類


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>