1. 程式人生 > >使用MD5線上加解密工具,對漢字進行加密,得到不同的結果

使用MD5線上加解密工具,對漢字進行加密,得到不同的結果

1. 問題背景

使用相同的漢字字串進行MD5計算,有時候會遇到:使用不同的線上工具,得到不同的MD5計算結果。

2. 原因

出現這樣情況的原因,通常是因為不同的線上工具使用的對漢字的編碼方式不同。(如果還有其他原因,歡迎大家評論留言哈,本喵也很想知道~)

3. 驗證

用一個32位的MD5的c程式來大致分析一下這個問題。

當使用VS的預設編碼方式GB2312或者Unicode時,得到的結果像下面圖1中那樣,這時候“加解密”三個漢字佔用6個位元組,可以知道這個時候是按照“1個漢字佔2位元組”的編碼方式來處理的。

(圖1)

 

當新增#pragma execution_character_set("utf-8")語句時,讓VS使用utf-8編碼方式,得到的結果像下面圖2中那樣,這時候“加解密”三個漢字佔用9個位元組,可以知道這個時候是按照“1個漢字佔3位元組”的編碼方式來處理的。

(圖2)

兩種編碼方式下,對漢字計算出的MD5結果是不同的,一般網上的線上MD5工具是使用的utf-8的編碼方式,我們用幾個線上工具試一下:

與我們c程式中使用utf-8的結果是一致的。目前網上大部分的線上MD5工具都是採用這種編碼方式。

4. 另:但是有的很奇怪,跟上面兩種資料都不相同

不清楚是什麼原因(對字母數字倒是和其他工具相同,是採用了其他的編碼方式嗎?),如果有大俠知道,還望指點。建議使用線上工具時,儘量使用通行辦法,避開一些比較偏的工具。