使用MD5線上加解密工具,對漢字進行加密,得到不同的結果
阿新 • • 發佈:2018-12-15
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. 另:但是有的很奇怪,跟上面兩種資料都不相同
不清楚是什麼原因(對字母數字倒是和其他工具相同,是採用了其他的編碼方式嗎?),如果有大俠知道,還望指點。建議使用線上工具時,儘量使用通行辦法,避開一些比較偏的工具。