2010-04-26 48 views
6

Tôi đang sử dụng require 'digest/sha1' để mã hóa mật khẩu của mình và lưu vào cơ sở dữ liệu. Trong quá trình đăng nhập, tôi xác thực bằng cách khớp mật khẩu được mã hóa được lưu trong cơ sở dữ liệu và mã hóa lần nữa một lần sử dụng nhập vào trường mật khẩu. Tính đến nay mọi thứ hoạt động tốt nhưng bây giờ tôi muốn làm chức năng 'Quên mật khẩu'. Để thực hiện điều này, tôi cần phải giải mã mật khẩu được lưu trong cơ sở dữ liệu để tìm mật khẩu gốc. Làm thế nào để giải mã bằng cách sử dụng digest/sha1? Hoặc có ai biết bất kỳ thuật toán nào hỗ trợ mã hóa & giải mã không?Mã hóa-giải mã trong Rails

Tôi đang sử dụng ruby ​​trên đường ray vì vậy tôi cần Ruby để hoàn thành nó.

+0

Một lựa chọn tốt hơn sẽ không cho phép phục hồi .. Nếu người dùng quên, sau đó có người sử dụng chọn một hình mới. Đó là phương pháp an toàn nhất và rẻ nhất. – baash05

Trả lời

10

SHA1 là một chức năng một cách để bạn không thể đảo ngược nó.

này có thể quan tâm lại reset mật khẩu: http://www.binarylogic.com/2008/11/16/tutorial-reset-passwords-with-authlogic/

Nếu bạn muốn làm mã hóa/giải mã sau đó bạn nên sử dụng một cái gì đó giống như AES. Một khi bạn bắt đầu sử dụng mã hóa/giải mã, tuy nhiên, bạn cũng sẽ phải bắt đầu lo lắng về quản lý khóa quá.

Về nhận xét của bạn về OP bên dưới - nếu bạn định lưu trữ thông tin CC, tôi khuyên bạn nên có nhân viên bảo mật để biết về mật mã, quản lý khóa v.v và ai cũng hiểu các khía cạnh pháp lý và pháp lý có liên quan .

+0

Ok sau đó tôi muốn biết Thuật toán 2way nào mà tôi có thể giải mã được. hãy xem bình luận trước của tôi ngay bên dưới câu trả lời được đưa ra bởi "Horace Ho" – Salil

6

không mã hóa mật khẩu. thay vào đó, lưu trữ băm của một mật khẩu (tốt hơn với một muối).

đến quên mật khẩu thường có nghĩa là (lại) xác thực thông qua một kênh khác, ví dụ: thông báo bằng email về đặt lại mật khẩu.

xem http://railscasts.com/episodes/209-introducing-devise nếu bạn cần thứ gì đó đã được tạo sẵn.

chỉnh sửa: nếu bạn thực sự cần mã hóa, google "openssl ruby"

có bao giờ là một giải pháp đơn giản cho việc an toàn. mức độ triển khai của bạn tốt như thế nào được xác định bởi liên kết điểm yếu.

như vậy, lời khuyên của tôi là, không tin tưởng vào một câu trả lời ngắn trên SO ;-)

+0

Tôi cần nó vì trong tương lai tôi muốn lưu một số dữ liệu bí mật cho ví dụ: - số thẻ tín dụng. Vì vậy, tôi cũng cần giải mã. – Salil

+0

Tôi đã chỉnh sửa câu trả lời của tôi (không phải như vậy) với một liên kết đến "openssl" – ohho

2

Như Horace Hồ giải thích, bạn không bao giờ nên mã hóa mật khẩu nhưng luôn luôn lưu trữ một muối crypted.

Tuy nhiên, hoàn toàn tốt để mã hóa các loại dữ liệu khác, chẳng hạn như thông tin bí mật. Encryptor đó là trình bao bọc đơn giản nhưng mạnh mẽ cho OpenSSL. Nó cung cấp khả năng mã hóa/giải mã các thuộc tính trong bất kỳ lớp nào.

+0

trong khi sử dụng nó tôi gặp sự cố khi tôi lưu dữ liệu đã mã hóa vào cơ sở dữ liệu – Salil

+0

Loại sự cố nào? –

1

Để làm được mã hóa hai chiều trên các lĩnh vực cơ sở dữ liệu khác kiểm tra các attr_enrypted đá quý

https://github.com/shuber/attr_encrypted

Nhưng khi đề cập đến bạn sẽ không muốn làm điều này trên một mật khẩu.Mật khẩu phải được lưu trữ một cách. Đối với chức năng mật khẩu bị quên, bạn thường gửi email cho họ một url không thể đoán được để cho phép họ chọn mật khẩu mới.

Có một ví dụ ở đây: http://railscasts.com/episodes/274-remember-me-reset-password?view=asciicast