php網站密碼md5加密串


PHP中“==”的一些坑

PHP 是弱類型的語言,會自動進行數據類型轉換,這無疑給我們的開發帶來了極大的方便。可事實真是如此嗎?今天我們就從==說起。

栗子

首先,看一下這段代碼。猜猜看結果會是什么

<?php
var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == ' 0xABCdef');

var_dump(0 == 'abcdefg');
var_dump(1 == '1abcdef');
?>

一眼看過,很明顯肯定都是false吧,但運行代碼后發現全是true

WTF!

為什么會這樣

開頭我已經說過了,PHP 是弱類型的語言。使用==對比兩個變量時,當有一個變量為整數,另外一個變量也會轉換為整數。這也就解釋了,為什么0 == 'abcdefg'1 == '1abcdef'會成立。

但是,其他的代碼呢?字符串難道還會轉換?

PHP 手冊上為我們提供了解釋說明。

If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.

也就是說,如果你比較的兩個字符串涉及到數字(如:"0"),那么每個字符串都會轉換成數字。

在這里,我不得不說:PHP是最好的語言!

危害

當我們的網站是直接MD5Sha1加密而沒有加鹽,碰巧某用戶密碼加密涉及到數字,那么就有可能被碰撞破解!

解決

  1. 在開發過程中盡可能避免使用==判斷兩個變量的值
  2. 密碼加密最好使用password_hash()或者加鹽md5($pwd.$salt)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM