2017-10-17 64 views
-4

通過看到this comment和評論here,在我腦海中提出的一個問題,那爲什麼我們不使用我們自己的PHP函數來保護密碼在MySQL?我們應該使用PHP內置函數。像password_hash() & password_verify()PHP內置或MySQL用戶定義函數密碼

如果我自己做我該怎麼辦PHP函數

例如:

HI HOW ARE YOU?安全代碼應該zq1zag1ewn1:a>!

我在函數中使用array

的代碼是這樣:

$txt = "HI HOW ARE YOU?"; 
$trans = array(" " => "1", "H" => "z", "C" => "f", "I" => "q", "O" => "a", "W" => "g", "A" => "e", "R" => "w", "E" => "n", "Y" => ":", "U" => ">", "?" => "!"); 
    $change = strtr($txt, $trans); 
    echo $change; 

我能否獲得使用PHP in-built function,而不是我的函數的原因是什麼?

+2

內置的現實世界的使用和運行良好的加密algorythms創建功能。你自己的加密功能可能缺乏這些非常重要的功能 –

+2

如果你自己的功能是加密密碼,那麼你會寫一些可能非常不安全的東西....見證你說的是加密而不是散列,表明您對安全性瞭解不足以瞭解其差異 –

+2

至於示例代碼,可以在幾秒鐘內打破簡單的替換密碼;甚至不像拿破崙的Vignere密碼那樣安全 –

回答

5

我可以得到使用PHP內置函數而不是我的函數的原因嗎?

你的做法是可怕的不安全,而且會一直在通過甚至用手工作二戰時期的密碼破譯專家破 - 可能使用類似frequency analysis。地獄,the ancient Romans (possibly even earlier, but they're the earliest documented) invented your fundamental technique

這就是爲什麼你不要roll your own crypto。你可能會搞砸了。你剛纔已經證明,寫一些看起來很安全的東西是多麼容易,但是可能會被任何現代計算機以毫秒爲單位打破。

如果你不是一個專家團隊的密碼專家,你的解決方案可能不是幾十年歷史,經過測試,同行評審的解決方案,從實際隊專家的密碼專家的一樣好。

參見:

+0

(此外,一個簡單的網絡服務器配置錯誤可能會暴露您的PHP代碼,這將給攻擊者提供解密所有密碼的方法。使用散列,源代碼泄露*不會提供此功能。) – ceejayoz

+0

哪一個最好'password_hash ()'或'password_verify()'? –

+0

@Chiru你需要兩個,他們做不同的事情。閱讀文檔。 – ceejayoz