Home [C# 筆記] MD5 加密
Post
Cancel

[C# 筆記] MD5 加密

MD5 加密

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
/*
MD5: 明碼加密 (不可逆) 

123 MD5加密结果:(16進制)
md5(123,32) = 202cb962ac59075b964b07152d234b70 //32位元
md5(123,16) = ac59075b964b0715 //12位元
 */

using System.Security.Cryptography;
using System.Text;
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

//202cb962ac59075b964b07152d234b70 //要換的16進制
//3244185981728979115075721453575112 //不一樣
//202cb962ac59075b964b07152d234b70 //.ToString("x2");
//.ToString(); 
//.ToString("x"); //16進制
//.ToString("x2"); //16進制,每次都是兩位數

string s = GetMD5("123");
Console.WriteLine(s);
Console.ReadKey();

static string GetMD5(string str)
{
    //建立MD5物件
    MD5 md5 = MD5.Create();

    //開始加密
    //需要將字串處理轉為byte[]位元組陣列
    byte[] buffer = Encoding.GetEncoding("big5").GetBytes(str);
    //返回一個加密好的byte[]位元組陣列
    byte[] md5Buffer = md5.ComputeHash(buffer);

    //將byte[]位元組陣列轉為字串
    //byte[]轉成字串 三種方式
    //1.將byte[]中的每個元素按照指定的編碼格式解析成字串
    //2.直接將byte[]陣列ToString() => 直接pass掉,因為會轉成命名空間
    //3.將byte[]中個元素ToString()
    //return Encoding.GetEncoding("big5").GetString(md5Buffer);

    //ex: 189 273 345 我愛你 剛試過會亂碼,也pass掉
    //剩第三種
    string strNew = "";
    for (int i = 0; i < md5Buffer.Length; i++) {
        strNew += md5Buffer[i].ToString("x2"); //x轉16進制,2表示每次输出兩位,不足兩位前面補0
    }
    return strNew;
}

Note:

.ToString(“x”); //16進制
.ToString(“x2”); //16進制,每次都是兩位數,不足兩位前面補0

MD5

  1. 打開 NuGet Package Explore 安裝 System.Text.Encoding.CodePages,
    或在 NuGet Package Manager Console 輸入:
    Install-Package System.Text.Encoding.CodePages
    
  2. 在程式一開始執行時加入
    1
    
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 
    

.NET Core - 使用中文編碼(big5)

This post is licensed under CC BY 4.0 by the author.