「作者主頁」:士別三日wyx
「作者簡介」:CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
「推薦專欄」:對網(wǎng)絡(luò)安全感興趣的小伙伴可以關(guān)注專欄《網(wǎng)絡(luò)安全入門到精通》
md5() 可以計算字符串的「MD5散列值」。
語法
string md5( $str, raw)
參數(shù)
- $str :需要計算的字符串
- raw :指定十六進制或二進制輸出格式
返回值
計算成功,就返回MD5值;計算失敗,就返回false。
1、基礎(chǔ)使用
平時使用最多的就是「計算MD5」
實例:文章來源:http://www.zghlxwxcb.cn/news/detail-621535.html
echo md5('hello');
輸出:
5d41402abc4b2a76b9719d911017c592
2、輸出格式
raw 參數(shù)控制輸出的「格式」:
- true :16個字符的「二進制格式」
- false :(默認)32個字符的十六進制格式
如果你在項目中遇到MD5「加密結(jié)果不一致」的問題,可以觀察兩個加密結(jié)果的長度是否相同,比如一個結(jié)果是16位,而另一個結(jié)果是32位,這種情況就可以考慮更換輸出格式來解決。
實例:
var_dump(md5('hello', true));
var_dump(md5('hello', false));
輸出:
string(16) "]A@*?K*v?q???"
string(32) "5d41402abc4b2a76b9719d911017c592"
3、科學(xué)計數(shù)法(0e繞過)
md5() 遇到「公式」,會先「運算」,再對運算結(jié)果「計算」MD5。
由于0和任何數(shù)相乘都等于0,所以0e開頭的任何數(shù),其MD5都是相同的。
比如 md5('0e1234')
,會先運算成 md5(0)
,再計算MD5值。
補充:
0e是科學(xué)計數(shù)法,大小寫等價,即 0e 和 0E 的結(jié)果相同。
科學(xué)記數(shù)法是一種記數(shù)的方法。把一個數(shù)表示成a與10的n次冪相乘的形式。
格式為:aEb=a×10^b,即a乘以10的b次冪。
實例:
echo md5(0).PHP_EOL;
echo md5(0e123).PHP_EOL;
echo md5(0e456).PHP_EOL;
echo md5(0E456);
輸出:
cfcd208495d565ef66e7dff9f98764da
cfcd208495d565ef66e7dff9f98764da
cfcd208495d565ef66e7dff9f98764da
cfcd208495d565ef66e7dff9f98764da
繞過思路1:遇到弱比較( md5(a)==md5(b)
)時,可以使用 0e繞過。
實例:
var_dump(md5(0e123) === md5(0e456));
var_dump(md5(0e123) == md5(0e456));
輸出:
bool(true)
bool(true)
0e繞過還有一種變體:如果某個字符串的MD5值是0e開頭的,在比較時,PHP也會先把它計算成 0,再參與比較。
繞過思路2:遇到若比較( md5(a)==0
),可以傳入QNKCDZO等繞過。
echo md5('QNKCDZO').PHP_EOL;
var_dump(md5('QNKCDZO') == 0);
輸出:
0e830400451993494058024219903391
bool(true)
一些MD5值為0e開頭的字符串:
QNKCDZO => 0e830400451993494058024219903391
240610708 => 0e462097431906509019562988736854
s878926199a => 0e545993274517709034328855841020
s155964671a => 0e342768416822451524974117254469
s214587387a => 0e848240448830537924465865611904
s214587387a => 0e848240448830537924465865611904
4、數(shù)組類型(數(shù)組繞過)
md5() 不能處理數(shù)組,數(shù)組都返回null。同時會報一個Warning,不影響執(zhí)行,不用管。
實例:
var_dump(md5([1,2]));
var_dump(md5([3,4]));
輸出:
Warning: md5() expects parameter 1 to be string,
NULL
Warning: md5() expects parameter 1 to be string,
NULL
繞過思路:遇到強比較(a===b
)時,可以使用數(shù)組繞過。GET傳參時,以 a[]=1&b[]=2
這種形式傳遞數(shù)組。
實例:
$a = array(1,2,3);
$b = array(4,5,6);
var_dump(md5($a)===md5($b));
輸出:
Warning: md5() expects parameter 1 to be string,
Warning: md5() expects parameter 1 to be string,
bool(true)
5、算數(shù)運算配合自動類型轉(zhuǎn)換
md5() 遇到運算符,會先運算,再計算結(jié)果的MD5值。
實例:
echo md5(1+2).PHP_EOL;
echo md5(3).PHP_EOL;
echo md5(1*2).PHP_EOL;
echo md5(2).PHP_EOL;
echo md5(1&1).PHP_EOL;
echo md5(true);
輸出:
eccbc87e4b5ce2fe28308fd9f2a7baf3
eccbc87e4b5ce2fe28308fd9f2a7baf3
c81e728d9d4c2f636f067f89cc14862c
c81e728d9d4c2f636f067f89cc14862c
c4ca4238a0b923820dcc509a6f75849b
c4ca4238a0b923820dcc509a6f75849b
當(dāng)字符串與數(shù)字類型運算時,會將字符串轉(zhuǎn)換成數(shù)字類型,再參與運算,最后計算運算結(jié)果的MD5值。
實例:
echo md5('1'+2).PHP_EOL;
echo md5(3).PHP_EOL;
echo md5('1'*2).PHP_EOL;
echo md5(2);
輸出:
eccbc87e4b5ce2fe28308fd9f2a7baf3
eccbc87e4b5ce2fe28308fd9f2a7baf3
c81e728d9d4c2f636f067f89cc14862c
c81e728d9d4c2f636f067f89cc14862c
6、數(shù)值類型
雖然 md5() 要求傳入字符串,但傳入整數(shù)或小數(shù)也不會報錯;數(shù)字相同時,數(shù)值型和字符串的計算結(jié)果是相同的。
實例:
var_dump(md5(123));
var_dump(md5('123'));
var_dump(md5(10.1));
var_dump(md5('10.1'));
輸出:文章來源地址http://www.zghlxwxcb.cn/news/detail-621535.html
string(32) "202cb962ac59075b964b07152d234b70"
string(32) "202cb962ac59075b964b07152d234b70"
string(32) "88d1955de012defb14b2db6f4797ff20"
string(32) "88d1955de012defb14b2db6f4797ff20"
到了這里,關(guān)于【機器學(xué)習(xí)】分類算法 - 樸素貝葉斯 MultinomialNB的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!