首頁 後端開發 C#.Net教程 .NET MD5加密解密程式碼解析

.NET MD5加密解密程式碼解析

Feb 10, 2017 pm 05:27 PM

這篇文章主要為大家詳細解析了.NET MD5加密解密代碼,具有一定的參考價值,有興趣的小伙伴們可以參考一下

MD5簡介:

  是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組字串轉換成一定長的大整數)。不管是MD2、MD4還是MD5,它們都需要獲得一個隨機長度的資訊並產生一個128位元的資訊摘要。雖然這些演算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位元機器做過設計優化的,而MD4和MD5卻是針對32位元的電腦。這三個演算法的描述和C語言原始碼在Internet RFCs 1321中有詳細的描述,這是一份最權威的文檔,由Ronald L. Rivest在1992年8月向IETF提交。

代碼:

string JiaMi = Md5Encrypt(LoginPwd);
    string JieMi = Md5Decrypt(JiaMi);

    #region MD5加密
    /// <summary>   
    /// MD5加密   
    /// </summary>   
    /// <param name="strSource">需要加密的字符串</param>   
    /// <returns>MD5加密后的字符串</returns>   
    public static string Md5Encrypt(string strSource)
    {
      //把字符串放到byte数组中   
      byte[] bytIn = System.Text.Encoding.Default.GetBytes(strSource);
      //建立加密对象的密钥和偏移量       
      byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量   
      byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥   
      //实例DES加密类   
      DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();
      mobjCryptoService.Key = iv;
      mobjCryptoService.IV = key;
      ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
      //实例MemoryStream流加密密文件   
      System.IO.MemoryStream ms = new System.IO.MemoryStream();
      CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
      cs.Write(bytIn, 0, bytIn.Length);
      cs.FlushFinalBlock();
      return System.Convert.ToBase64String(ms.ToArray());
    }
    #endregion


    #region MD5解密
    /// <summary>   
    /// MD5解密   
    /// </summary>   
    /// <param name="Source">需要解密的字符串</param>   
    /// <returns>MD5解密后的字符串</returns>   
    public static string Md5Decrypt(string Source)
    {
      //将解密字符串转换成字节数组   
      byte[] bytIn = System.Convert.FromBase64String(Source);
      //给出解密的密钥和偏移量,密钥和偏移量必须与加密时的密钥和偏移量相同   
      byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量   
      byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥   
      DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider();
      mobjCryptoService.Key = iv;
      mobjCryptoService.IV = key;
      //实例流进行解密   
      System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);
      ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
      CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
      StreamReader strd = new StreamReader(cs, Encoding.Default);
      return strd.ReadToEnd();
    }
    #endregion
登入後複製

另一種MD5 透過某種運作方式:

MD5加密簡單的說就是把一段明文求出。例如:明文為:abcdefg 通過一些列運算 得到 密文 7ac66c0f148de9519b8bd264312c4d64

它有兩個特性:1.無碰撞,2.不可逆。

無碰撞是指:

7ac66c0f148de9519b8bd264312c4d64 這段密文只能由abcdefgf 1968bd264312c4d64 這段密文只能由abcdefgf 756c d64,也就是說沒有那兩個明文加密後會得到相同的密文。

不可逆是指:

    明文經過加密後得到密文,而無法透過密文 求出明文。也就是說 當我們知道明文 adcdefg 可以透過加密得到 7ac66c0f148de9519b8bd264312c4d64,但是我們如果知道 某段文字 加密後 得到7ac66c0f148de9519b8bd264312c4648 4d64這段文字是由誰加密而來的。

 例如 用戶設定的密碼 為 abcdefg,而儲存的時候 我們儲存的是 abcdefg加密過之後得到的值 7ac66c0f148de9519b8bd264312c4d64,那麼用戶再次登入時 會輸入密碼是否相等,我們如何比較兩者?

 我們無法透過加密後的值換算出加密前的值,因此我們通常的做法是,把用戶再次登入時輸入的密碼再次加密和資料庫中存放的值進行比對,如果相等則說明輸入的密碼正確。

 需要引用using System.Web.Security;

FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();

也希望大家多多支持PHP中文網。

更多.NET MD5加密解密程式碼解析相關文章請關注PHP中文網! 🎜
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1243
24
C#.NET:探索核心概念和編程基礎知識 C#.NET:探索核心概念和編程基礎知識 Apr 10, 2025 am 09:32 AM

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

c#.net的持續相關性:查看當前用法 c#.net的持續相關性:查看當前用法 Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

從網絡到桌面:C#.NET的多功能性 從網絡到桌面:C#.NET的多功能性 Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#作為多功能.NET語言:應用程序和示例 C#作為多功能.NET語言:應用程序和示例 Apr 26, 2025 am 12:26 AM

C#在企業級應用、遊戲開發、移動應用和Web開發中均有廣泛應用。 1)在企業級應用中,C#常用於ASP.NETCore開發WebAPI。 2)在遊戲開發中,C#與Unity引擎結合,實現角色控制等功能。 3)C#支持多態性和異步編程,提高代碼靈活性和應用性能。

c#.net適合您嗎?評估其適用性 c#.net適合您嗎?評估其適用性 Apr 13, 2025 am 12:03 AM

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

.NET中的C#代碼:探索編程過程 .NET中的C#代碼:探索編程過程 Apr 12, 2025 am 12:02 AM

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

C#.NET與未來:適應新技術 C#.NET與未來:適應新技術 Apr 14, 2025 am 12:06 AM

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

將C#.NET應用程序部署到Azure/AWS:逐步指南 將C#.NET應用程序部署到Azure/AWS:逐步指南 Apr 23, 2025 am 12:06 AM

如何將C#.NET應用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。 1.在Azure上,使用AzureAppService和AzurePipelines自動化部署。 2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda實現部署和無服務器計算。

See all articles