2014-06-12 19 views
7

Tôi có câu hỏi về việc hiểu băm sha512-crypt. Tôi tìm thấy điều này tutorial để thiết lập dovecot và postfix với mysql. Tôi đã làm theo hướng dẫn (với những sửa đổi nhỏ) và mọi thứ hoạt động tốt. Nhưng có một điều, rằng tôi không hiểu:sha512-crypt mysql và dovecot

Để thêm người dùng, tôi nên sử dụng:

INSERT INTO `mailserver`.`virtual_users` 
    (`id`, `domain_id`, `password` , `email`) 
VALUES 
    ('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]'), 
    ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email protected]'); 

và một lần nữa, điều này làm việc hoàn toàn tốt đẹp, tức là tôi có thể đăng nhập với mật khẩu của tôi (và chỉ có mật khẩu của tôi) để dovecot. Nhưng tại sao? Nếu tôi nhìn thấy nó đúng, nó mã hóa mật khẩu với một muối ngẫu nhiên, nhưng nó không lưu nó ở bất cứ đâu. Vì vậy, băm cùng một mật khẩu hai lần cho tôi 2 băm khác nhau (tôi đã thử nó). Vì vậy, câu hỏi của tôi sôi xuống: Tôi có thể nhận được một lời giải thích ngắn gọn về sha-512 (mà tôi không thể tìm thấy trực tuyến) và giải thích tại sao những dòng này hoạt động không?

Cảm ơn đã

+0

Bạn đã tìm thấy truy vấn khớp với mật khẩu/người dùng dựa vào cơ sở dữ liệu chưa? –

+0

có, đó là: 'password_query = CHỌN mật khẩu TỪ người dùng WHERE username = '% u'' – ciem

Trả lời

10

Muối được lưu như là một phần của mật khẩu. Ví dụ gọi:

ENCRYPT('firstpassword', CONCAT('$6$', 'FooBarBaz')) 

Cho

$ 6 $ FooBarBaz $ .T.G.7FRJqZ6N2FF7b3BEkr5j37CWhwgvPOOoccrr0bvkBbNMmLCxzqQqKJbNhnhC.583dTBLEuZcDuQe7NEe.

Cửa hàng này cả thuật toán được sử dụng (6 là SHA512) và muối ('FooBarBaz') đều bị xóa bởi $.

Edit: Để kiểm tra một mật khẩu mà bạn có thể sử dụng:

password = ENCRYPT('user_input', `password`) 

ENCRYPT sẽ lấy muối từ mật khẩu được lưu trữ và sử dụng khi kiểm tra user_input.

Toàn bộ tín dụng cho hek2mgl để kiểm tra mật khẩu mà anh đã chi tiết trong this answer.

+0

Cảm ơn rất nhiều, đúng vậy. Liệu mysql có một cách dễ dàng để phù hợp với một mật khẩu chống lại một chuỗi được lưu như thế trong cơ sở dữ liệu? I E. một hàm mà tôi có thể cung cấp cho $ 6 $ FooBarBaz $ .T.G.7FRJqZ6N2FF7b3BEkr5j37CWhwgvPOOoccrr0bvkBbNMmLCxzqQqKJbNhnhC.583dTBLEuZcDuQe7NEe' và một mật khẩu để khớp với nó như là các đối số trả về đúng hay sai bằng cách nào đó? – ciem

+0

@ciem ENCRYPT có thể được sử dụng cho điều đó. Tôi sẽ chỉnh sửa trong một ví dụ. – Jim

+0

cảm ơn câu trả lời chi tiết – ciem