DotNet中幾種常用的加密演算法

来源:http://www.cnblogs.com/pengze0902/archive/2016/10/21/5985093.html
-Advertisement-
Play Games

在.NET項目中,我們較多的使用到加密這個操作。因為在現代的項目中,對信息安全的要求越來越高,那麼多信息的加密就變得至關重要。現在提供幾種常用的加密/解密演算法。 1.用於文本和Base64編碼文本的互相轉換 和 Byte[]和Base64編碼文本的互相轉換: (1).將普通文本轉換成Base64編碼 ...


      在.NET項目中,我們較多的使用到加密這個操作。因為在現代的項目中,對信息安全的要求越來越高,那麼多信息的加密就變得至關重要。現在提供幾種常用的加密/解密演算法。

  1.用於文本和Base64編碼文本的互相轉換 和 Byte[]和Base64編碼文本的互相轉換:

    (1).將普通文本轉換成Base64編碼的文本

       /// <summary>
        /// 將普通文本轉換成Base64編碼的文本
        /// </summary>
        /// <param name="value">普通文本</param>
        /// <returns></returns>
        public static string StringToBase64String(string value)
        {
            if (string.IsNullOrEmpty(value))
            {
                throw new ArgumentNullException(value);
            }
            try
            {
                var binBuffer = (new UnicodeEncoding()).GetBytes(value);
                var base64ArraySize = (int)Math.Ceiling(binBuffer.Length / 3d) * 4;
                var charBuffer = new char[base64ArraySize];
                Convert.ToBase64CharArray(binBuffer, 0, binBuffer.Length, charBuffer, 0);
                var s = new string(charBuffer);
                return s;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

        }

   (2).將Base64編碼的文本轉換成普通文本

        /// <summary>
        /// 將Base64編碼的文本轉換成普通文本
        /// </summary>
        /// <param name="base64">Base64編碼的文本</param>
        /// <returns></returns>
        public static string Base64StringToString(string base64)
        {
            if (string.IsNullOrEmpty(base64))
            {
                throw new ArgumentNullException(base64);
            }
            try
            {
                var charBuffer = base64.ToCharArray();
                var bytes = Convert.FromBase64CharArray(charBuffer, 0, charBuffer.Length);
                return (new UnicodeEncoding()).GetString(bytes);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

  (3).將Byte[]轉換成Base64編碼文本

        /// <summary>
        /// 將Byte[]轉換成Base64編碼文本
        /// </summary>
        /// <param name="binBuffer">Byte[]</param>
        /// <returns></returns>
        public string ToBase64(byte[] binBuffer)
        {
            if (binBuffer == null)
            {
                throw new ArgumentNullException("binBuffer");
            }
            try
            {
                var base64ArraySize = (int)Math.Ceiling(binBuffer.Length / 3d) * 4;
                var charBuffer = new char[base64ArraySize];
                Convert.ToBase64CharArray(binBuffer, 0, binBuffer.Length, charBuffer, 0);
                var s = new string(charBuffer);
                return s;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

        }

 (4).將Base64編碼文本轉換成Byte[]

       /// <summary>
        /// 將Base64編碼文本轉換成Byte[]
        /// </summary>
        /// <param name="base64">Base64編碼文本</param>
        /// <returns></returns>
        public byte[] Base64ToBytes(string base64)
        {
            if (string.IsNullOrEmpty(base64))
            {
                throw new ArgumentNullException(base64);
            }
            try
            {
                var charBuffer = base64.ToCharArray();
                var bytes = Convert.FromBase64CharArray(charBuffer, 0, charBuffer.Length);
                return bytes;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

2. DES加密/解密類。

  (1).加密

  private static readonly string KEY = "pengze0902";

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="Text"></param>
        /// <returns></returns>
        public static string Encrypt(string Text)
        {
            return Encrypt(Text, KEY);
        }
        /// <summary> 
        /// 加密數據 
        /// </summary> 
        /// <param name="Text"></param> 
        /// <param name="sKey"></param> 
        /// <returns></returns> 
        public static string Encrypt(string Text, string sKey)
        {
            var des = new DESCryptoServiceProvider();
            var inputByteArray = Encoding.Default.GetBytes(Text);
            var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
            des.Key = bKey;
            des.IV = bKey;
            var ms = new System.IO.MemoryStream();
            var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            var ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);
            }
            return ret.ToString();
        }

  (2).解密

   private static readonly string KEY = "pengze0902";
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string Decrypt(string text)
        {
            return Decrypt(text, KEY);
        }

        /// <summary> 
        /// 解密數據 
        /// </summary> 
        /// <param name="text"></param> 
        /// <param name="sKey"></param> 
        /// <returns></returns> 
        public static string Decrypt(string text, string sKey)
        {
            var des = new DESCryptoServiceProvider();
            var len = text.Length / 2;
            byte[] inputByteArray = new byte[len];
            int x;
            for (x = 0; x < len; x++)
            {
                var i = Convert.ToInt32(text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
            des.Key = bKey;
            des.IV = bKey;
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Encoding.Default.GetString(ms.ToArray());
        }

 (3).取得MD5加密串

        //// <summary>
        /// 取得MD5加密串
        /// </summary>
        /// <param name="input">源明文字元串</param>
        /// <returns>密文字元串</returns>
        public static string Md5Hash(string input)
        {
            var md5 = new MD5CryptoServiceProvider();
            var bs = Encoding.UTF8.GetBytes(input);
            bs = md5.ComputeHash(bs);
            var s = new StringBuilder();
            foreach (var b in bs)
            {
                s.Append(b.ToString("x2").ToUpper());
            }
            var password = s.ToString();
            return password;
        }

3.MD5加密

   (1). 32位大寫

        /// <summary>
        /// 32位大寫
        /// </summary>
        /// <returns></returns>
        public static string Upper32(string s)
        {
            var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
            if (hashPasswordForStoringInConfigFile != null)
                s = hashPasswordForStoringInConfigFile.ToString();
            return s.ToUpper();
        }

  (2). 32位小寫

        /// <summary>
        /// 32位小寫
        /// </summary>
        /// <returns></returns>
        public static string Lower32(string s)
        {
            var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
            if (hashPasswordForStoringInConfigFile != null)
                s = hashPasswordForStoringInConfigFile.ToString();
            return s.ToLower();
        }

  (3).16位大寫

        /// <summary>
        /// 16位大寫
        /// </summary>
        /// <returns></returns>
        public static string Upper16(string s)
        {
            var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
            if (hashPasswordForStoringInConfigFile != null)
                s = hashPasswordForStoringInConfigFile.ToString();
            return s.ToUpper().Substring(8, 16);
        }

 (4).16位小寫

        /// <summary>
        /// 16位小寫
        /// </summary>
        /// <returns></returns>
        public static string Lower16(string s)
        {
            var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");
            if (hashPasswordForStoringInConfigFile != null)
                s = hashPasswordForStoringInConfigFile.ToString();
            return s.ToLower().Substring(8, 16);
        }

4.Sha1簽名演算法

        /// <summary>
        /// 簽名演算法
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string GetSha1(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                throw new ArgumentNullException(str);
            }
            try
            {
                //建立SHA1對象
                SHA1 sha = new SHA1CryptoServiceProvider();
                //將mystr轉換成byte[] 
                var enc = new ASCIIEncoding();
                var dataToHash = enc.GetBytes(str);
                //Hash運算
                var dataHashed = sha.ComputeHash(dataToHash);
                //將運算結果轉換成string
                var hash = BitConverter.ToString(dataHashed).Replace("-", "");
                return hash;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

        }

5.Sha256加密演算法

       /// <summary>
        /// 將字元串轉換為sha256散列
        /// </summary>
        /// <param name="data">字元串進行轉換</param>
        /// <returns>sha256散列或null</returns>
        public static string ToSha256(this string data)
        {
            try
            {
                if (string.IsNullOrEmpty(data))
                    return null;

                var hashValue = new SHA256Managed().ComputeHash(Encoding.UTF8.GetBytes(data));
                var hex = hashValue.Aggregate("", (current, x) => current + String.Format("{0:x2}", x));

                if (string.IsNullOrEmpty(hex))
                    throw new Exception("Erro creating SHA256 hash");

                return hex;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message, e);
            }
        }

   以上是一些較為常用的演算法代碼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 代碼是敲出來的嗎?是批量生成出來的嗎? No no no,代碼是設計出來的! 如果說到代碼生成器,大家可能會想到三層、動軟代碼生成器、資料庫表等等。其一般的思路是,先有資料庫然後根據庫里的表自動生成一系列的代碼,包括實體類、持久化、業務層(空函數)、頁面代碼等,還可以生成資料庫文檔。這個確實很好很強 ...
  • 文檔目錄 本節內容: 簡介 關於 IAbpSeesion 註入會話 會話屬性 用戶標識符 關於 IAbpSeesion 簡介 如果一個應用需要登錄,它就需要知道當前用戶在執行的操作。儘管Asp.net自身在展現層提供了Session(會話)對象,而ABP提供IAbpSession介面來獲取當前用戶和 ...
  • 文檔目錄 本節內容: 什麼時依賴註入 傳統方式的問題 解決方案 構造器註入模式 屬性註入模式 依賴註入框架 ABP 依賴註入基礎 註冊依賴 約定註入 輔助介面 自定義/直接 註冊 使用IocManager 使用Castle Windsor API 解析 構造器和屬性註入 IIocResolver 和 ...
  • 第一次在項目中遇到遠程訪問postgresql資料庫的,當時經常會出現連接資料庫的錯誤,連接字元串出現亂碼現象 解決方案 在配置文件中添加連接字元串 後臺代碼 最後連接成功 ...
  • 在.net框架體系內,反射特性較多的應用到。反射的相關定義分為兩種。 自然解釋:射是一種自然現象,表現為受刺激物對刺激物的逆反應;這是反射的字面解釋,我們看一下電腦編程中的反射; 編程解釋:通過 System.Reflection 命名空間中的類以及 System.Type,您可以獲取有關已載入的 ...
  • 老規矩,先簡單介紹下MQTT: MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支持所有平臺,幾乎可以把所有聯網物品和外部連接起來,被用來當做感測器和致動器(比如通過Twitte ...
  • 在項目中,有時候一些信息不便完全顯示,只需要顯示部分信息。現在提供一些隱藏敏感信息的操作方法,主要為對信息的截取操作: 1.指定左右字元數量,中間的*的個數和實際長度有關: 2.指定左右字元數量,中間的*的個數固定: 3.“*”數量一定,設置為4個,按信息總長度的比例來取,預設左右各取1/3: 4. ...
  • 一、前言 前不久因公司產品需要完成了線上升級功能,因為編程技術不精,不敢冒然採用Socket方法實現線上升級,所以使用比較方便穩妥的WCF方式 如果考慮併發能力的話還是Socket>WCF>Remoting,所以如果你是Socket專家的話這篇你就不用看了。 二、流程 本篇主要講述一個完整的升級思路 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...