2013-08-16 17 views
0

我試圖設置使用的crypt()安全登錄&登記制度,因爲我已閱讀,這是PHP對bcrypt隱窩密碼存儲和retrival PHP

我註冊一個用戶,但以他們的密碼存儲功能然後再加密。

$hashed_password = crypt($mypassword); 

然後我在數據庫

然後當我在用戶登錄我試圖匹配密碼存儲什麼店$ hashed_pa​​ssword。

我發現php.net這個功能,但不能讓它的工作

$密碼是存儲加密的密碼和$輸入mypassword是用戶輸入

if ($password == crypt($mypassword, $password)) { 
    echo "Success! Valid password"; 
} 

據我所知,隱窩生成一個唯一的散列每次它的調用,所以我不明白該函數如何工作。

我完全錯過了這一點,因爲我讀了crypt()是一個函數並且解密不存在?

任何幫助,不僅呈現出我的方式錯誤,而且在完成此安全登錄不勝感激

+1

這個問題將有所幫助:http://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for- hashing-passwords-in-php – Sammaye

回答

2

您正在使用第二個參數你的電話號碼爲crypt(),所以它被視爲鹽。要正確比較,你可以使用:

if ($password == crypt($mypassword)) 
{ 
    echo "Success! Valid password"; 
} 

但PHP提供了哈希程序本機功能 - 它被引入,如果5.5版本,並呼籲password hashing

對於低於5.5到5.3.7的PHP版本,有一個backported兼容性功能,它的功能相同:https://github.com/ircmaxell/password_compat只需包含它並使用它即可。

但請注意,您必須從數據庫中讀取哈希密碼,然後將其與PHP進行比較。您無法使用新創建的密碼哈希查詢數據庫以查找該用戶。

+0

@Sven,感謝編輯! –

+0

正如我上面所說的,你會想要一個'==='if語句,因爲PHP將結果轉換爲int來比較它們,它們不會相等比較 – Sammaye

+0

我的服務器是php 5.2.17,所以這是不好的對我來說 –

-1

有需要但here..this教程將幫助幾個步驟: http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL

本質你想要在數據庫中加密密碼 - 例如。所以如果密碼爲'mypassword',它將被存儲在一些隨機字符串中,比如'3ifdgk5ty = -dlsfs'。

閱讀sha1(md5不再被認爲是安全的)。但是我從來沒有使用過crypt,但是sha1()似乎在與salt結合使用時爲我做了這項工作(添加了一個額外的文本字符串以使其更難破解破解)

+0

請不要推薦SHA1用於散列密碼。有更好的選擇,比如PBKDF2,bcrypt或scrypt。 – Carsten

+0

@Carsten,我不會評論你是否提到過MD5,SHA-1有什麼問題?我正在投票,因爲它不需要downvote。 –

+0

好點 - bcrypt是一個更好的替代方法,快速搜索 – Zabs

-2

你不能解密它,因爲散列是一種方式。所以你不能通過哈希獲得原始輸入。即使您有權訪問數據庫,也無法泄露用戶密碼。

它正在使用這樣的: 用戶寫入密碼,輸入 - >提交表單 - >密碼進入數據庫,像以下:

sha1($_POST['password']);

那麼你存儲這個散列密碼的數據庫。

當用戶試圖登錄,他提出再次形成,它並此邏輯($result['password'])來自數據庫查詢:

if(sha1($_POST['password']) == $result['password']) { 
    //password match, so lets log you -> set sessions, cookies and so on 
} 
+0

我在原帖中說過這個,我也沒有使用sha1 –

0

假設從數據庫加密的密碼是$db_pass和輸入的密碼是$new_pass。那麼這裏是你如何測試:

if($db_pass === crypt($new_pass)){ 
    echo "Success!"; 
} 

這個職位將help...

+0

你想要做一個'==='否則PHP會將兩者都轉換爲整數並且不會真的測試它們的真平等 – Sammaye

+0

哦,是的,謝謝你的隊友!現在用於C++ .. –