2012-04-23 50 views
11

Tôi hiện đang triển khai hệ thống đăng nhập. Tôi muốn lưu trữ mật khẩu và muối trong cơ sở dữ liệu. Bây giờ tôi phát hiện ra rằng có một hash() và một chức năng crypt() mà dường như làm như vậy (hợp lệ cho SHA512).so sánh hàm băm() so với crypt()

hash() mới hơn và có vẻ như hỗ trợ nhiều alogrithms băm hơn crypt(). Hoặc có bất kỳ sự khác biệt nào khác mà tôi nên biết/quan tâm không?

Edit:

function generatePasswordHash($password){ 
    $salt = base64_encode(mcrypt_create_iv(8)); 
    $calculatedPasswordHash = crypt($password, '$1$' . $salt . '$'); 

    return $calculatedPasswordHash; 
} 

Kết quả trông giống như $1$Qh6ByGJ9$zLn3yq62egvmc9D7SzA2u.

Đây chức năng kiểm tra mật khẩu của tôi:

function checkLoginData($username, $password){ 
    global $db; 

    $sql = "SELECT * FROM users WHERE username = :username"; 
    $result = $db->ExecuteQuery($sql, array("username"=>$username)); 

    if(!empty($result)){ 
     $result = $result[0]; 
     $savedPasswordHash = $result['password']; 
     $splitted = explode("$", $savedPasswordHash); 
     $salt = $splitted[2]; 
     $calculatedPasswordHash = crypt($password, '$1$' . $salt . '$'); 

     if($savedPasswordHash === $calculatedPasswordHash){ 
      return true; 
     } 
    } 

    return false; 
} 
+0

@CodeInChaos: Lưu trữ và truy cập băm mật khẩu từ cơ sở dữ liệu. Cả hai có thể lấy muối (thêm muối vào tham số '$ data' của' hash() 'thông qua nối). – testing

+1

Chỉ cần ghép nối muối vào dữ liệu là không an toàn trong nhiều trường hợp. Đừng làm điều đó, trừ khi bạn thực sự biết những gì bạn đang làm. Nó cũng * nhanh * và bạn muốn nó * chậm *. – CodesInChaos

+1

Mã mới mã hóa mật khẩu, thay vì băm. tức là có thể đảo ngược tầm thường của nó. – CodesInChaos

Trả lời

15

Sử dụng hash cho băm, ví dụ như trong kiểm tra tính toàn vẹn. Nó trực tiếp sử dụng thuật toán băm được chỉ định.

crypt là chức năng mục đích đặc biệt. Nó được sử dụng cho băm mật khẩu và dẫn xuất quan trọng. Bạn sẽ cần phải vượt qua trong một muối, mà gián tiếp xác định sơ đồ băm được sử dụng. Ngay cả khi bạn chọn CRYPT_SHA512 thì đây không phải là SHA512 đơn giản. Đó là một hàm dẫn xuất quan trọng sử dụng SHA512 làm khối xây dựng. Đặc biệt một kế hoạch như vậy là cố tình chậm (tấn công brute-force hider) và kết hợp muối và mật khẩu một cách an toàn.

Để băm mật khẩu trong hệ thống nhật ký, crypt rõ ràng là lựa chọn đúng đắn.

+0

Bạn thích sử dụng chức năng nào để lưu trữ/truy xuất băm mật khẩu? – testing

+2

'crypt' với' CRYPT_BLOWFISH' và một muối chất lượng cao, từ một PRNG mã hóa, chẳng hạn như 'mcrypt_create_iv' sẽ ổn. Điều này đòi hỏi php 5.3. Nhưng vì tôi không có lập trình viên php, tôi chưa xem xét chi tiết. – CodesInChaos

+0

Tôi phát hiện ra rằng webspace chỉ cung cấp 'Standard DES' và' MD5'. Tôi sẽ có một cái nhìn vào thư viện 'mcrypt' ... – testing

Các vấn đề liên quan