Làm cách nào để mã hóa mật khẩu trong cơ sở dữ liệu MySQL?

Trong máy chủ MySQL, chúng tôi phải giải thích hàm mật khẩu () và cách nó sẽ khôi phục mật khẩu ở dạng chuỗi của nó. Chức năng mật khẩu được sử dụng chủ yếu để xác thực. Hàm mật khẩu mã hóa chuỗi thành dạng nhị phân. Khôi phục mật khẩu ở dạng văn bản và đặt mật khẩu cũ và chọn nó ở dạng văn bản. Hàm mật khẩu trả về nó ở dạng chuỗi và khôi phục mật khẩu ở dạng văn bản thuần túy. Mật khẩu cũng lưu trữ dưới dạng bản ghi trên máy chủ

Trong các hình dưới đây, chúng tôi có một bảng cơ sở dữ liệu "nhân viên" và sử dụng nó với một số truy vấn với kết quả hiển thị như sau

mysql-> chọn * từ myworld;


Phiên bản MySQL. 5. 6


Thí dụ

Mã số

SELECT PASSWORD('w3resource');

Giải trình

Câu lệnh MySQL ở trên mã hóa chuỗi văn bản thuần túy w3resource và trả về một chuỗi nhị phân *EE0804DDC2CC3E85A47191ECCCBA29B775DFFA77

Trước hết, xin lưu ý rằng hầu hết mọi người không mã hóa (như bạn đã viết) mật khẩu vào cơ sở dữ liệu của họ. Mã hóa, dù đối xứng hay bất đối xứng, có nghĩa là dữ liệu có thể được giải mã lại. Mã hóa mật khẩu sẽ là một khái niệm rất tồi (ít nhất là nếu có một khóa chung cho tất cả chúng) vì các khóa giải mã sẽ phải được lưu trữ ở đâu đó và nếu kẻ tấn công nắm được chúng, anh ta có thể giải mã ngay lập tức tất cả mật khẩu

Những gì bạn muốn làm được gọi là băm. Hàm băm của mật khẩu được lấy từ mật khẩu bằng cách áp dụng hàm băm cho mật khẩu. Điểm mấu chốt ở đây là quá trình này không thể hoàn nguyên, tôi. e. không có phương pháp toán học nào để lấy lại mật khẩu từ hàm băm

Đã nói điều này

  • SET PASSWORD và PASSWORD() của MySQL không được dùng nữa. Chúng sẽ bị xóa trong các phiên bản MySQL trong tương lai. Nếu bạn muốn ứng dụng của mình chạy với các phiên bản MySQL trong tương lai, không sử dụng SET PASSWORD và PASSWORD()

  • MD5 và SHA1 chắc chắn không phải là con đường để đi;

  • Họ SHA-2 (e. g. SHA256, SHA512) được coi là an toàn theo nghĩa toán học. Tuy nhiên, nó có chi phí tính toán thấp/tốc độ cao và GPU tiêu dùng ngày nay có thể tính toán nhiều tỷ hàm băm SHA-2 mỗi giây. Do đó, đối với mật khẩu băm, các hàm băm khác như bcrypt, pbkdf2 hoặc scrypt (là hàm yêu thích hiện tại của tôi) là phù hợp;

Tôi không biết PHP, nhưng hầu hết các ngôn ngữ đều có chức năng gọi là crypt() hoặc encrypt() hoặc tương tự sử dụng API crypt() của O/S bên dưới (trong Linux. glibc), vì vậy bạn có thể sử dụng điểm này làm điểm bắt đầu, nhưng chỉ khi nó đã cung cấp một trong các thuật toán băm chậm (hầu hết không phải như vậy)

MySQL có một chức năng được gọi là PASSWORD()0, chức năng này cũng sử dụng crypt() của HĐH,. MySQL cũng có , nhưng như đã đề cập ở trên, điều này có thể không đủ. Thật không may, MySQL (AFAIK) không cung cấp PASSWORD()3, PASSWORD()4, PASSWORD()5 hoặc bất kỳ hàm băm chậm nổi tiếng nào khác

Vì bạn nên sử dụng một trong các thuật toán băm chậm và vì cả crypt() của HĐH (trong hầu hết các trường hợp) cũng như MySQL đều không cung cấp bất kỳ thuật toán nào trong số đó, nên bạn nên thực hiện việc băm trong ứng dụng back-end của mình. Như đã nói ở trên, tôi không biết PHP, nhưng tôi khá chắc chắn rằng có một triển khai cho ít nhất một thuật toán băm chậm nổi tiếng (không phụ thuộc vào ________9__ của hệ điều hành cơ bản/libc)

Nhân tiện, sẽ không có sự khác biệt về kết quả giữa các lần triển khai thuật toán băm khác nhau. Ví dụ: nếu bạn áp dụng SHA512 cho một chuỗi bằng ngôn ngữ lập trình yêu thích của mình, kết quả sẽ giống như khi bạn áp dụng SHA512 cho cùng một chuỗi đó bằng MySQL. Điều này cũng đúng với các thuật toán băm khác, bao gồm cả những thuật toán chậm. Có thể có một sự khác biệt hiệu suất, mặc dù

Điều đó về cơ bản có nghĩa là, nếu bây giờ bạn thực hiện băm trong ứng dụng của mình, bạn có thể thực hiện sau trong MySQL ngay khi MySQL cung cấp thuật toán băm chậm mà bạn đang sử dụng. Bạn có thể chuyển đổi qua lại giữa băm trong ứng dụng back-end và băm trong cơ sở dữ liệu mà không phải tính toán lại tất cả các băm được lưu trữ và không làm mất dữ liệu

Quy tắc bổ sung của ngón tay cái

  • Thậm chí đừng nghĩ đến việc triển khai hệ thống đăng nhập/mật khẩu của riêng bạn trước khi bạn hiểu đầy đủ tất cả các tài liệu tham khảo tôi đã cung cấp

  • Nếu vì lý do nào đó, bạn buộc phải sử dụng bất kỳ thuật toán băm nào khác ngoài thuật toán chậm, hãy luôn sử dụng muối, tất nhiên là với một loại muối khác nhau cho mỗi mật khẩu. Trong khi một số người tuyên bố rằng điều này là vô ích, tôi không nghĩ vậy. Nó vẫn sẽ làm cho các cuộc tấn công trở nên khó khăn hơn (so với băm mà không có muối). Nhưng các cuộc tấn công chống lại các thuật toán băm nhanh như các thuật toán thuộc họ SHA-2, cho dù có sử dụng muối hay không, vẫn sẽ cực kỳ dễ dàng và hiệu quả so với các cuộc tấn công chống lại một trong các thuật toán băm chậm.

Cuối cùng, đây là một mục blog sẽ giúp bạn bắt đầu. Điều này sẽ cho bạn cảm giác về điều gì là quan trọng, nhưng bạn sẽ phải nghiên cứu thêm (bốn năm sau bây giờ. )

Bạn có thể mã hóa cơ sở dữ liệu MySQL không?

Để kích hoạt mã hóa cho vùng bảng hệ thống mysql, hãy chỉ định tên vùng bảng và tùy chọn ENCRYPTION trong câu lệnh ALTER TABLESPACE . mysql> THAY ĐỔI TABLESPACE mysql ENCRYPTION = 'Y'; .

Làm cách nào để ẩn mật khẩu trong cơ sở dữ liệu MySQL?

Cách duy nhất để làm điều đó là sử dụng mật khẩu được mã hóa và lưu trữ mật khẩu đó trong một tệp riêng biệt . Để biên dịch lại, hãy sử dụng dịch vụ web.

MySQL sử dụng mã hóa nào cho mật khẩu?

Băm mật khẩu do Máy chủ MySQL lưu trữ được tạo bằng cách băm mật khẩu văn bản thuần hai lần bằng cách sử dụng SHA1 . Khi máy khách truyền mật khẩu đến máy chủ, nó sẽ sử dụng ba mẩu thông tin. Hàm băm SHA1 của mật khẩu văn bản thuần túy. Hàm băm SHA1 của hàm băm SHA1 của mật khẩu văn bản thuần túy.

Làm cách nào tôi có thể mã hóa mật khẩu của mình?

Mã hóa cơ sở dữ liệu bằng mật khẩu .
Mở cơ sở dữ liệu ở chế độ Độc quyền. Làm cách nào để mở cơ sở dữ liệu ở chế độ Độc quyền?.
Trên tab Tệp, bấm Thông tin, rồi bấm Mã hóa bằng Mật khẩu. .
Nhập mật khẩu của bạn vào hộp Mật khẩu, nhập lại mật khẩu đó vào hộp Xác minh, rồi bấm OK

Chủ đề