2009-12-26 63 views
21

Tôi có một hộp thoại hộp thoại jquery bật lên để đăng nhập vào trang web của mình. Khi người dùng nhấp vào đăng nhập, yêu cầu đăng lên tệp login.php sẽ như sau:Cách sử dụng MD5 trong javascript để truyền mật khẩu

$.post(
     'includes/login.php', 
     { user: username, pass: password }, 
     onLogin, 
     'json'); 

Làm cách nào để thực hiện md5 trên mật khẩu đó trước khi đưa vào yêu cầu đăng? Ngoài ra, tôi có mật khẩu của người dùng được lưu trữ trong cơ sở dữ liệu MySQL sử dụng MD5(), vì vậy tôi muốn chỉ so sánh phiên bản được lưu trữ của mật khẩu với MD5 của mật khẩu được gửi. Nhờ bất cứ ai trả lời.

+13

Better sử dụng SSL để bảo đảm kết nối của bạn. – Gumbo

+0

Đồng ý với Gumbo. Sau đó, ở phía máy chủ sử dụng SHA256 – AntonioCS

+2

Tôi đã bật SSL, nhưng tôi muốn có mật khẩu được mã hóa trong tiêu đề http được mã hóa. – adhanlon

Trả lời

27

crypto-js là một thư viện javascript phong phú chứa nhiều thuật toán mã hóa.

Tất cả bạn phải làm là chỉ cần gọi CryptoJS.MD5(password)

$.post(
    'includes/login.php', 
    { user: username, pass: CryptoJS.MD5(password) }, 
    onLogin, 
    'json'); 
+12

Plugin này không còn khả dụng vì một số lý do. Có một phiên bản tại đây: http://www.richardpeacock.com/dev/files/jquery.md5.js.txt – Rob

+5

Có lẽ bạn nên sử dụng http://code.google.com/p/crypto- tiêu chuẩn hơn js/crypto-js và bao gồm JS cho mật mã bạn cần. –

+2

Tôi nghĩ câu trả lời này cần được chăm sóc và chú ý tình yêu vì plugin được liên kết dường như không khả dụng ngay bây giờ. – Kev

4

Bạn có thể muốn kiểm tra trang này: http://pajhome.org.uk/crypt/md5/

Tuy nhiên, nếu việc bảo vệ mật khẩu là rất quan trọng, bạn nên thực sự được sử dụng giống như SHA256 (MD5 không phải là mã hóa an toàn iirc). Thậm chí nhiều hơn, bạn có thể muốn xem xét việc sử dụng TLS và nhận chứng chỉ để bạn có thể sử dụng https.

+0

Cảm ơn bạn đã trả lời, tôi đang sử dụng https cho trang web của mình, nhưng vì lý do nào đó apache sử dụng mã hóa khi truyền trang, nhưng sau khi trang tải nó vẫn sử dụng https, nhưng trang không được mã hóa. Bạn có nghĩ rằng nó sẽ vẫn mã hóa thông tin đăng nhập khi nó được gửi? – adhanlon

+0

Tôi không phải là một chuyên gia, nhưng bạn có thể thử gói sniffing một máy tính thử nghiệm để xem nếu nó được mã hóa hay không. – SapphireSun

26

Nếu ai đó đánh hơi của bạn plain-text HTTP giao thông (hoặc bộ nhớ cache/cookie) cho các mật khẩu chỉ chuyển mật khẩu vào một hash sẽ không giúp đỡ - Mật khẩu băm có thể được "phát lại" cũng như văn bản thuần. Khách hàng sẽ cần phải băm mật khẩu với thứ gì đó ngẫu nhiên (như ngày và giờ) Xem phần "AUTH CRAM-MD5" tại đây: http://www.fehcom.de/qmail/smtpauth.html

+4

+1 câu trả lời duy nhất giải thích rằng điều này không an toàn. – Pablo

+0

Nó là an toàn nếu sử dụng SSL và câu hỏi không nói rằng nó không phải là. – malthe

+0

@malthe Xác thực cơ bản được bảo mật bằng SSL – Motes

2

Để trả lời jt. Bạn là chính xác, HTML chỉ với mật khẩu là dễ bị Man trong cuộc tấn công giữa. Tuy nhiên, bạn có thể gieo hạt bằng GUID từ máy chủ ...

$.post(
    'includes/login.php', 
    { user: username, pass: $.md5(password + GUID) }, 
    onLogin, 
    'json'); 

Điều này sẽ đánh bại Man-In-The middle ... trong đó máy chủ sẽ tạo GUID mới cho mỗi lần thử.

+2

vâng, đây là một ý kiến ​​hay. Cách tiếp cận thách thức/phản hồi này cũng được đề cập trong http://pajhome.org.uk/crypt/md5/auth.html – Menace

15

Tôi khuyên bạn nên sử dụng CryptoJS trong trường hợp này.

Về cơ bản CryptoJS là bộ sưu tập ngày càng tăng của các thuật toán mã hóa chuẩn và an toàn được triển khai trong JavaScript bằng cách sử dụng các mẫu và thực tiễn tốt nhất. Chúng rất nhanh và chúng có giao diện nhất quán và đơn giản.

Vì vậy, Trong trường hợp bạn muốn tính toán hash (MD5) của chuỗi mật khẩu của bạn sau đó làm như sau:

<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/md5.js"></script> 
<script> 
    var passhash = CryptoJS.MD5(password).toString(); 

    $.post(
     'includes/login.php', 
     { user: username, pass: passhash }, 
     onLogin, 
     'json'); 
</script> 

Vì vậy, kịch bản này sẽ đăng hash của chuỗi mật khẩu của bạn đến máy chủ.

Đối biết thêm thông tin và hỗ trợ trên các thuật toán băm tính khác mà bạn có thể truy cập tại địa chỉ:

http://code.google.com/p/crypto-js/

+0

được trả lời hay :) –

+0

Cảm ơn câu trả lời này ... cho những người đang tìm kiếm mã hóa/giải mã giữa JavaScript và C#/VB.NET cho javascript được đề nghị là câu trả lời này và bạn cũng có thể muốn xem http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5(v=vs này .110) .aspx cho C# –

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