我有一個密碼從我的iPhone應用程序通過php腳本user.php傳遞給數據庫。在存入數據庫之前加密密碼?
變量$傳球被填充如下:
$pass = str_replace("'", "", $_REQUEST['pass']);
我怎樣才能加密此它插入到我的數據庫之前?我讀了一些關於不同的技術,但尋找最好的方法來管理這個。
感謝大家。
我有一個密碼從我的iPhone應用程序通過php腳本user.php傳遞給數據庫。在存入數據庫之前加密密碼?
變量$傳球被填充如下:
$pass = str_replace("'", "", $_REQUEST['pass']);
我怎樣才能加密此它插入到我的數據庫之前?我讀了一些關於不同的技術,但尋找最好的方法來管理這個。
感謝大家。
如果你不關心檢索的實際密碼的值(從數據庫加密後的值),你可以在它上面運行單向散列算法(如sha1:http://php.net/manual/en/function.sha1.php)。該函數將返回一個特定長度的字符串(散列),它不能用於查找原始字符串(理論上)。有可能兩個不同的字符串可以創建相同的散列(稱爲衝突),但這不應該是密碼問題。
例子: $pass = sha1($_REQUEST['pass']);
一件事,讓它多一點安全是鹽添加到哈希並再次運行哈希函數。這使得惡意地生成密碼哈希變得更加困難,因爲鹽值僅在服務器端處理。
例子:
的最基本的:用MD5或SHA-1
$newpass = md5($_REQUEST['pass']);
或
$newpass = sha1($_REQUEST['pass']);
最近,我開始進行存儲散列以及用戶名散列,所以登錄嘗試是安全的只使用散列數據進行比較。
你可以用額外的數據「散佈」哈希,所以如果它們被破壞,它的價值無法找到(嘗試使用谷歌搜索一些簡單的散列字)..即使用一個站點範圍的字符串只是爲了改變標準哈希,如md5("mySiteSalt!!" . $_REQUEST['pass']);
或更先進的東西。
使用crypt一些鹽。如
$user = strip_tags(substr($_REQUEST['user'],0,32));
$plain_pw = strip_tags(substr($_REQUEST['pass'],0,32));
$password = crypt(md5($plain_pw),md5($user));
上http://www.ibm.com/developerworks/opensource/library/os-php-encrypt/
您應該使用SHA1哈希您的密碼存儲在數據庫中。這是存儲密碼的最簡單但最有效的方式:
$password = sha1($password);
這也是特別安全。雖然它的完整性開始蔓延,但將此功能升級到SHA-256(這非常安全)相當容易。
要找出原因MD5,SHA1和他們迅速的朋友可能不是一個好主意,你應該閱讀由Thomas Ptacek後Enough With The Rainbow Tables: What You Need To Know About Secure Password Schemes。要點:
最後,我們瞭解到,如果我們想 存儲密碼安全,我們有三個 合理的選擇:PHK的MD5方案, Provos-Maziere的Bcrypt方案,並 SRP。我們瞭解到,正確的 選擇是Bcrypt。
注:這是PHK,而不是PHP。
首先,你應該創建一個隨機的用戶鹽。然後,您應該將該密碼和密碼哈希存儲在數據庫中。
$salt = md5(unique_id().mt_rand().microtime());
$pass = sha1($salt.$_REQUEST['pass']);
並在數據庫中保存$ salt和$ pass。然後,當他們去登錄你看他們的行和檢查哈希:
$user = query('SELECT * FROM `user` WHERE username = ?', array($_REQUEST['username']));
if($user)
{
// If the password they give maches
if($user->pass === sha1($user->salt. $_REQUEST['pass']))
{
// login
}
else
{
// bad password
}
}
else
{
// user not found
}
創建爲每個帳戶確保彩虹表是無用的,任何人闖入你的服務器的用戶鹽會有暴力破解每個密碼。
無關:使用正確的輸入逃逸,不靠'str_replace'過濾掉所有引號 – knittl 2010-10-20 20:46:17
它是從一個iPhone應用程序來,通過URL傳遞給腳本。 – BigMike 2010-10-20 20:50:33
另見的OpenWall的[便攜式PHP的密碼哈希框架(http://www.openwall.com/phpass/)(PHPass)。它強化了對用戶密碼的一些常見攻擊。 – jww 2014-10-11 23:34:57