RoR - thế hệ MD5


77

Làm cách nào để mã hóa một chuỗi bằng MD5 trong Rails 3.0? pass = MD5.hexdigest(pass) trong một mô hình sản lượnguninitialized constant MyModel::MD5


3
Bạn có thể muốn kiểm tra bài này trên lý do tại sao sử dụng MD5 / SHA như một phần của chương trình xác thực của bạn là một lựa chọn người nghèo: codahale.com/how-to-safely-store-a-password
Mike Buckbee

Một điểm của thuật ngữ: băm, sử dụng ví dụ như thuật toán MD5, không phải là mã hóa . Bạn mã hóa thứ gì đó khi bạn cũng có thể muốn giải mã nó. Bạn thường không thể xác định thông điệp gốc từ một hàm băm và đó thường là điểm chính xác của việc sử dụng thuật toán băm.
Nhầm lẫn

Câu trả lời:


177

Bạn có thể sử dụng Digest::MD5từ thư viện chuẩn của Ruby cho việc này.

irb(main):001:0> require 'digest/md5'
=> true
irb(main):002:0> Digest::MD5.hexdigest('foobar')
=> "3858f62230ac3c915f300c664312c63f"

Và một điều nữa: MD5 là một thuật toán băm. Bạn không "mã hóa" bất cứ thứ gì bằng thuật toán băm.


15
Một điều nữa: MD5 về cơ bản đã bị hỏng (theo nghĩa mật mã) và không nên được sử dụng nữa. Nếu bạn bắt đầu một dự án phần mềm mới, hãy sử dụng thuật toán băm mạnh hơn như SHA512 hoặc bcrypt và đừng quên thêm muối vào mật khẩu của bạn trước khi băm chúng.
joschi

8
MD5 bị hỏng vì mục đích mật mã, nhưng vẫn có thể được sử dụng để so sánh các tệp. Git vẫn sử dụng nó sau khi tất cả. NHƯNG DON "T HASH MẬT KHẨU VỚI MD5
AlexQueue

2
Git đang sử dụng SHA1 cho hầu hết các nhu cầu băm của nó.
joschi

2
Nếu bạn đang băm mật khẩu để lưu trữ vào cơ sở dữ liệu, hãy sử dụng bcrypt, không phải MD5. Cả hai đều có sẵn dưới dạng thư viện Ruby và từ góc độ triển khai cả hai đều dễ dàng như nhau, nhưng trong trường hợp không chắc cơ sở dữ liệu của bạn bị xâm phạm (đó là toàn bộ điểm của mật khẩu băm trước khi lưu trữ), bcrypt sẽ khó bẻ khóa hơn md5 và do đó. luôn là sự lựa chọn tốt hơn. Đừng quên thêm muối.
lms
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.