【轉】asp.net(c#)加密解密演算法之sha1、md5、des、aes實現源碼詳解

来源:http://www.cnblogs.com/GodX/archive/2016/07/14/5669665.html
-Advertisement-
Play Games

原文地址:http://docode.top/Article/Detail/10003 目錄: 1、.Net(C#)平臺下Des加密解密源代碼 2、.Net(C#)平臺下Aes加密解密源代碼 3、.Net(C#)平臺下Sha1加密解密源代碼 4、.Net(C#)平臺下MD5加密解密源代碼 5、總結 ...


原文地址:http://docode.top/Article/Detail/10003

目錄:

1、.Net(C#)平臺下Des加密解密源代碼

2、.Net(C#)平臺下Aes加密解密源代碼

3、.Net(C#)平臺下Sha1加密解密源代碼

4、.Net(C#)平臺下MD5加密解密源代碼

5、總結

一、.Net(C#)平臺下Des加密解密源代碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 public class DesEncryptHelper {     /// <summary>     /// Des預設密鑰向量     /// </summary>     public static string DesIv     {         get         {             return "20160602";  // 此處可自定義,8個字元長度         }     }       /// <summary>     /// Des加解密鑰必須8位     /// </summary>     public static string DesKey     {         get         {             return "20160602";  // 此處可自定義,8個字元長度         }     }       /// <summary>     /// 獲取Des8位密鑰     /// </summary>     /// <param name="key">Des密鑰字元串</param>     /// <param name="encoding">編碼類型</param>     /// <returns>Des8位密鑰</returns>     static byte[] GetDesKey(string key, Encoding encoding)     {         if (string.IsNullOrEmpty(key))         {             throw new ArgumentNullException("key""Des密鑰不能為空");         }         if (key.Length > 8)         {             key = key.Substring(0, 8);         }         if (key.Length < 8)         {             // 不足8補全             key = key.PadRight(8, '0');         }         return encoding.GetBytes(key);     }       /// <summary>     /// Des加密     /// </summary>     /// <param name="source">源字元串</param>     /// <param name="encoding">編碼類型</param>     /// <returns>加密後的字元串</returns>     public string EncryptDes(string source, Encoding encoding = null)     {         return EncryptDes(source, DesKey, DesIv, encoding);     }       /// <summary>     /// Des加密     /// </summary>     /// <param name="source">源字元串</param>     /// <param name="key">des密鑰,長度必須8位</param>     /// <param name="iv">密鑰向量</param>     /// <param name="encoding">編碼類型</param>     /// <returns>加密後的字元串</returns>     public static string EncryptDes(string source, string key, string iv, Encoding encoding = null)     {         if (encoding == null) encoding = Encoding.UTF8;           byte[] rgbKeys = GetDesKey(key, encoding),                 rgbIvs = GetDesKey(iv, encoding),                 inputByteArray = encoding.GetBytes(source);         using (DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider())         {             using (MemoryStream memoryStream = new MemoryStream())             {                 using (CryptoStream cryptoStream = new CryptoStream(memoryStream,                  desProvider.CreateEncryptor(rgbKeys, rgbIvs), CryptoStreamMode.Write))                 {                     cryptoStream.Write(inputByteArray, 0, inputByteArray.Length);                     // 1.第一種                     cryptoStream.FlushFinalBlock();                     cryptoStream.Close();                     memoryStream.Flush();                     memoryStream.Close();                     desProvider.Clear();                     string result = Convert.ToBase64String(memoryStream.ToArray());                     return result;                       // 2.第二種                     //StringBuilder result = new StringBuilder();                     //foreach (byte b in memoryStream.ToArray())                     //{                     //    result.AppendFormat("{0:X2}", b);                     //}                     //cryptoStream.FlushFinalBlock();                     //cryptoStream.Close();                     //memoryStream.Flush();                     //memoryStream.Close();                     //desProvider.Clear();                     //return result.ToString();                 }             }         }     }       /// <summary>     /// Des解密     /// </summary>     /// <param name="source">源字元串</param>     /// <param name="encoding">編碼類型</param>     /// <returns>解密後的字元串</returns>     public static string DecryptDes(string source, Encoding encoding = null)     {         return DecryptDes(source, DesKey, DesIv, encoding);     }       /// <summary>     /// Des解密     /// </summary>     /// <param name="source">源字元串</param>     /// <param name="key">des密鑰,長度必須8位</param>     /// <param name="iv">密鑰向量</param>     /// <param name="encoding">編碼類型</param>     /// <returns>解密後的字元串</returns>     public static string DecryptDes(string source, string key, string iv, Encoding encoding = null)     {         if (encoding == null) encoding = Encoding.UTF8;           byte[] rgbKeys = GetDesKey(key, encoding),                 rgbIvs = GetDesKey(iv, encoding),                 inputByteArray = Convert.FromBase64String(source);         using (DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider())         {             using (MemoryStream memoryStream = new MemoryStream())             {                 using (CryptoStream cryptoStream = new CryptoStream(memoryStream,                  desProvider.CreateDecryptor(rgbKeys, rgbIvs), CryptoStreamMode.Write))                 {                     cryptoStream.Write(inputByteArray, 0, inputByteArray.Length);                     cryptoStream.FlushFinalBlock();                     cryptoStream.Close();                     memoryStream.Flush();                     memoryStream.Close();                     desProvider.Clear();                     byte[] result = memoryStream.ToArray();                     return encoding.GetString(result);                 }             }         }     } }

二、.Net(C#)平臺下Aes加密解密源代碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 public class AesEncryptHelper {     /// <summary>     /// Aes加解密鑰必須32位     /// </summary>     public static string AesKey     {         get         {             return "asekey32w"// 此處可自定義,32個字元長度         }     }       /// <summary>     /// 獲取Aes32位密鑰     /// </summary>     /// <param name="key">Aes密鑰字元串</param>     /// <param name="encoding">編碼類型</param>     /// <returns>Aes32位密鑰</returns>     static byte[] GetAesKey(string key, Encoding encoding)     {         if (string.IsNullOrEmpty(key))         {             throw new ArgumentNullException("key""Aes密鑰不能為空");         }         if (key.Length < 32)         {             // 不足32補全             key = key.PadRight(32, '0');         }         if (key.Length > 32)         {             key = key.Substring(0, 32);         }         return encoding.GetBytes(key);     }       /// <summary>     /// Aes加密     /// </summary>     /// <param name="source">源字元串</param>     /// <returns>加密後的字元串</returns>     public static string EncryptAes(string source)     {         return EncryptAes(source, AesKey);     }       /// <summary>     /// Aes加密     /// </summary>     /// <param name="source">源字元串</param>     /// <param name="key">aes密鑰,長度必須32位</param>     /// <param name="model">運算模式</param>     /// <param name="padding">填充模式</param>     /// <param name="encoding">編碼類型</param>     /// <returns>加密後的字元串</returns>     public static string EncryptAes(string source, string key, CipherMode model = CipherMode.ECB,      PaddingMode padding = PaddingMode.PKCS7, Encoding encoding = null)     {         if (encoding == null) encoding = Encoding.UTF8;           using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())         {             aesProvider.Key = GetAesKey(key, encoding);             aesProvider.Mode = model;             aesProvider.Padding = padding;             using (ICryptoTransform cryptoTransform = aesProvider.CreateEncryptor())             {                 byte[] inputBuffers = encoding.GetBytes(source),                     results = cryptoTransform.TransformFinalBlock(inputBuffers, 0, inputBuffers.Length);                 aesProvider.Clear();                 return Convert.ToBase64String(results, 0, results.Length);             }         }     }       /// <summary>     /// Aes解密     /// </summary>     /// <param name="source">源字元串</param>     /// <returns>解密後的字元串</returns>     public static string DecryptAes(string source)     {         return DecryptAes(source, AesKey);     }       /// <summary>    &nb
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下麵給出了Remoting的小實例,主要功能是將客戶端的數據寫入到服務端。 分析圖: 程式代碼為2個控制台應用程式(1個客戶端,1個伺服器端)和1個類庫,如下所示。 客戶端代碼: using RemotingObjects; using System; using System.Collection ...
  • 起因 最近在對接一個第三方平臺。該平臺只提供了Java版本的SDK,C#版本的還處於敬請期待狀態。由於C#可以復用絕大部分代碼,便考慮找一個Java到C#的轉換器,在試用了幾個軟體之後,發現還是Java to C# Converter(下文簡稱Converter)好用一點。然而基本版功能受限(文件夾 ...
  • 說是手機充值系統有點裝了,其實就是調用了聚合數據的支付介面,其實挺簡單的事 但是我發現博客園竟然沒有類似文章,我就個出頭鳥把我的代碼貢獻出來吧 首先說準備工作: 去聚合數據申請賬號-添加手機支付的認證-認證通過後為賬戶充值。 上述工作完成後,開始準備開發要用到的必要參數: appid:在個人中心-我 ...
  • 就在去年Insus.NET已經寫好的一個WebAPI項目,並且發佈在IIS中。參考《創建與使用Web API》http://www.cnblogs.com/insus/p/5019088.html 從上面的鏈接可以查看到那篇實例。今天Insus.NET就另開一個ASP.NET MVC項目,去操作這個 ...
  • 最近看書比較多,正好對過去幾年的軟體開發做個總結。寫這個的初衷只是為了簡單的做一些記錄。 前言 複雜的應用程式總是面臨很多的頁面之間的數據交互,怎樣創建松耦合的程式一直是多數工程師所思考的問題。諸如依賴註入,PubSub模式,MVVM等概念,都致力於幫助我們創建更加松耦合易於維護的程式,也有不少框架 ...
  • 模擬Visual Studio中的完全匹配查找 轉載請註明出處:http://www.cnblogs.com/jzblogs/p/5670397.html ...
  • 1,document.getElementById getElementById是通過Id來設置/返回HTML標簽的屬性及調用其事件與方法。用這個方法基本上可以控制頁面所有標簽,條件很簡單,就是給每個標簽分配一個ID號。返回具有指定ID屬性值的第一個對象的一個引用。 語法: var inTag = ...
  • 第一步:購買功能變數名稱、伺服器、DNS解析這裡我們是在準備做一個網站的原材料,這三樣缺一不可。目前來說,可以租用的虛擬伺服器的商家很多,像亞馬遜、騰訊、阿裡等,當然,你也可以去找國外的一些免費的伺服器來用。實際一點來說,亞馬遜的伺服器你在成功註冊後有一年的試用期,這個倒是挺不錯的,不過他需要國外的一個信用... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...