2014-10-08 59 views
-2

我寫個人使用(我希望,但不認爲任何人都不會去那裏)網站,並開發了下面的算法:我的哈希算法有多安全?

function encryptPassword($username, $password) { 
    $username=md5($username); 
    $password=md5($password); 

    $newpass = substr($username, 0, 5) . $password . substr($username, 5); 
    $newpass = md5($newpass); 

    return $newpass; 
} 

因爲它仍然是一種「知道密碼,你在'類似系統(像往常一樣),我認爲將密碼隱藏在數據庫中會是一個更好的主意。

我以前使用過簡單的MD5x1算法(基本上:md5(pass)並完成),但隨後訪問數據庫的人可以很容易地將其反向散列。這樣我不認爲你能夠反轉哈希這件事。

+1

一如既往的這些事情:失敗。不要重新發明輪子。 – 2014-10-08 17:24:02

+0

哈希算法應該是安全的嗎?我認爲他們只是應該執行散列而不是某種類型的加密。 – j08691 2014-10-08 17:24:42

+3

這是_thoroughly_不安全。 – SLaks 2014-10-08 17:24:44

回答

5

不是。

  1. MD5在密碼學上很弱。
  2. 鹽應該是隨機的,而不是來源於已知的值。
  3. 一輪哈希是微不足道的打破這些天。

解以上:

  1. 使用更好的算法,優選SHA2或更好。
  2. 生成隨機鹽。
  3. 哈希多輪

哦,等等,已經有內置到PHP的整個庫做這個,除了方式更好。它是password_hash(),如果你使用的是早於5.5版本的PHP,當它被實現時,有password_compat,它可以早於5.3.7支持它,並且如果仍然不起作用,你真的需要更新你的PHP安裝。

最後,除非你有密碼學方面的大專水平的教育,否則你絕不應該嘗試「推出你自己的」哈希或加密方案。 99%的時間會比使用行業標準的系統安全得多。

+0

對所有上述。增加:成功的哈希算法向公衆發佈,由安全專家審查,然後最終(也許!)推薦用於生產現場。不要推出自己的加密。 – 2014-10-08 19:31:32

+0

@Sammitch發佈了正確的答案。請接受它。 :) – 2014-10-09 02:51:10