C#使用MD5算法對(duì)密碼進(jìn)行加密的示例代碼
一、涉及到的知識(shí)點(diǎn)
1.MD5
MD5(Message Digest Algorithm 5)是一種被廣泛使用的“消息-摘要算法”。“消息-摘要算法”實(shí)際上就是一個(gè)單項(xiàng)散列函數(shù),數(shù)據(jù)塊經(jīng)過(guò)單向散列函數(shù)得到一個(gè)固定長(zhǎng)度的散列值,數(shù)據(jù)塊的簽名就是計(jì)算數(shù)據(jù)塊的散列值,MD5算法的散列值為128位。
2.使用基類的 Create 方法來(lái)創(chuàng)建 MD5 對(duì)象
應(yīng)該使用其基類的 Create 方法來(lái)創(chuàng)建 MD5 對(duì)象。如果還是用MD5CryptoServiceProvider 類,那么將會(huì)得到警告SYSLIB0021。
使用 MD5.Create() 方法來(lái)創(chuàng)建 MD5 對(duì)象更加簡(jiǎn)潔易讀。這種方法也適用于其他過(guò)時(shí)的加密類,如 SHA1CryptoServiceProvider、SHA256CryptoServiceProvider 等。通過(guò)使用基類的 Create() 方法,代碼將更加簡(jiǎn)潔、易讀且符合最佳實(shí)踐。
using System.Security.Cryptography; // ... MD5 md5 = MD5.Create();
3.對(duì)每個(gè)字節(jié)進(jìn)行加密并將其轉(zhuǎn)換為十六進(jìn)制字符串
str += md5data[i].ToString("x").PadLeft(2, '0');//對(duì)遍歷到的字節(jié)進(jìn)行加密具體來(lái)說(shuō),這段代碼執(zhí)行以下操作:
- 使用 for 循環(huán)遍歷字節(jié)數(shù)組 md5data 中的每個(gè)字節(jié)。
- 將當(dāng)前字節(jié)轉(zhuǎn)換為十六進(jìn)制字符串,使用 “x” 格式說(shuō)明符表示。例如,字節(jié)值 0x1A 將轉(zhuǎn)換為字符串 “1a”。
- 使用 PadLeft 方法將轉(zhuǎn)換后的十六進(jìn)制字符串左對(duì)齊,確保其長(zhǎng)度為 2。如果字符串長(zhǎng)度小于 2,將用字符 ‘0’ 在左側(cè)填充。例如,字符串 “1a” 將被轉(zhuǎn)換為 “01a”。
- 將處理后的十六進(jìn)制字符串追加到字符串變量 str 中。
- 通過(guò)這些操作,原始字節(jié)數(shù)據(jù)將被轉(zhuǎn)換為一個(gè)包含十六進(jìn)制字符的字符串。這是 MD5 加密過(guò)程的一部分,最終將生成一個(gè) 32 個(gè)字符的 MD5 哈希值。
4.ComputeHash(Byte[])
計(jì)算指定字節(jié)數(shù)組的哈希值。
public byte[] ComputeHash (byte[] buffer); 參數(shù) buffer Byte[] 要計(jì)算其哈希代碼的輸入。 返回 Byte[] 計(jì)算所得的哈希代碼。 例外 ArgumentNullException buffer 為 null。 ObjectDisposedException 對(duì)象已被釋放。
二、使用MD5算法對(duì)密碼進(jìn)行加密
// 使用MD5算法對(duì)密碼進(jìn)行加密
using System.Security.Cryptography;
namespace _155
{
class Program
{
/// <summary>
/// 對(duì)遍歷到的字節(jié)進(jìn)行加密
/// </summary>
/// <param name="strPwd">輸入的待加密的字符串</param>
/// <returns name="str">返回加密后的值</returns>
public static string Encrypt(string strPwd)
{
MD5 md5 = MD5.Create();
byte[] data = System.Text.Encoding.Default.GetBytes(strPwd);//將字符編碼為一個(gè)字節(jié)序列
byte[] md5data = md5.ComputeHash(data); //計(jì)算data字節(jié)數(shù)組的哈希值
md5.Clear(); //清空MD5對(duì)象
string str = ""; //定義一個(gè)變量,用來(lái)記錄加密后的密碼
for (int i = 0; i < md5data.Length - 1; i++)
{
str += md5data[i].ToString("x").PadLeft(2, '0');
}
return str;
}
static void Main(string[] args)
{
ArgumentNullException.ThrowIfNull(args);
while (true)
{
Console.Write("請(qǐng)輸入密碼:");
string P_str_Code = Console.ReadLine()!;
Console.WriteLine("使用MD5加密后的結(jié)果為:" + Encrypt(P_str_Code));
}
}
}
}
//運(yùn)行結(jié)果:
/*
請(qǐng)輸入密碼:123456789Qq
使用MD5加密后的結(jié)果為:6d28b4834bd6a9e384be01c131a8f2
請(qǐng)輸入密碼:123456789QQ
使用MD5加密后的結(jié)果為:46e7640c5b2ddeab142d71d872163b
請(qǐng)輸入密碼:123456789qq
使用MD5加密后的結(jié)果為:9c32d6523556378b8b1632720f7ab1
請(qǐng)輸入密碼:
*/到此這篇關(guān)于C#使用MD5算法對(duì)密碼進(jìn)行加密的示例代碼的文章就介紹到這了,更多相關(guān)C# MD5算法密碼加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# WinForm國(guó)際化實(shí)現(xiàn)的簡(jiǎn)單方法
這篇文章主要介紹了C# WinForm國(guó)際化實(shí)現(xiàn)的簡(jiǎn)單方法,有需要的朋友可以參考一下2014-01-01
C#?操作Windows注冊(cè)表的實(shí)現(xiàn)方法
本文主要介紹了C#?操作Windows注冊(cè)表的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
C#設(shè)計(jì)模式之Template模板方法模式實(shí)現(xiàn)ASP.NET自定義控件 密碼強(qiáng)度檢測(cè)功能
這篇文章主要介紹了C#設(shè)計(jì)模式之Template模板方法模式實(shí)現(xiàn)ASP.NET自定義控件 密碼強(qiáng)度檢測(cè)功能,簡(jiǎn)單介紹了模板方法模式的定義、原理及檢測(cè)密碼強(qiáng)度的相關(guān)使用技巧,需要的朋友可以參考下2017-09-09
關(guān)于C#執(zhí)行順序帶來(lái)的一些潛在問(wèn)題
這篇文章主要給大家介紹了關(guān)于C#執(zhí)行順序帶來(lái)的一些潛在問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

