Kiểu dữ liệu cho mật khẩu trong mysql là gì?

Máy chủ MySQL sử dụng chức năng này để mã hóa mật khẩu MySQL để lưu trữ trong cột Mật khẩu của bảng cấp quyền người dùng

cú pháp

PASSWORD(string);

Tranh luận

NameDescriptionstringMột chuỗi sẽ được mã hóa bằng hàm MẬT KHẨU

Sơ đồ cú pháp

Kiểu dữ liệu cho mật khẩu trong mysql là gì?

Phiên bản MySQL. 5. 6


Ví 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

Loại dữ liệu mật khẩu băm phụ thuộc vào thuật toán băm mà chúng tôi đang sử dụng. Thuật toán băm không phụ thuộc vào kích thước đầu vào vì nó tạo ra kết quả có cùng độ dài. Nó đưa ra kết quả trong một chuỗi các chữ số thập lục phân và chúng ta có thể giảm một nửa các chữ số thập lục phân với sự trợ giúp của hàm UNHEX()

Có nhiều thuật toán và kiểu dữ liệu khác nhau để lưu trữ giá trị

  • MD5 − Nó có thể sử dụng char(32) hoặc BINARY(16)

  • SHA-1 − Nó có thể sử dụng kiểu dữ liệu char(40) hoặc BINARY(20)

Ví dụ về MD5

Sau đây là một ví dụ -

mysql> select MD5('This is a hashed password');

Đây là đầu ra

+----------------------------------+
| MD5('This is a hashed password') |
+----------------------------------+
| e9d4c42db40abbb4724a0047f7e91e67 |
+----------------------------------+
1 row in set (0.03 sec)

Để biết độ dài của mật khẩu băm

mysql>  SELECT CHARACTER_LENGTH(MD5('This is a hashed password'));
+----------------------------------------------------+
| CHARACTER_LENGTH(MD5('This is a hashed password')) |
+----------------------------------------------------+
|                                                 32 |
+----------------------------------------------------+
1 row in set (0.04 sec)

Ví dụ về SHA-1

mysql> select SHA1('This is a hashed password');

Sau đây là đầu ra

+------------------------------------------+
| SHA1('This is a hashed password')        |
+------------------------------------------+
| 4e2e1a39dba84a0b5a91043bb0e4dbef23970837 |
+------------------------------------------+
1 row in set (0.00 sec)

Chúng ta có thể biết độ dài với sự trợ giúp của hàm character_length()

mysql>  SELECT CHARACTER_LENGTH(SHA1('This is a hashed password'));

Sau đây là đầu ra

________số 8

Kiểu dữ liệu cho mật khẩu trong mysql là gì?


Kiểu dữ liệu cho mật khẩu trong mysql là gì?

Argon2 đã giành chiến thắng trong cuộc thi băm mật khẩu năm 2015. Scrypt, bcrypt và PBKDF2 là các thuật toán cũ hơn hiện được coi là ít được ưa chuộng hơn, nhưng về cơ bản vẫn hợp lý, vì vậy nếu nền tảng của bạn chưa hỗ trợ Argon2, bạn có thể sử dụng thuật toán khác ngay bây giờ

Không bao giờ lưu trữ mật khẩu trực tiếp trong cơ sở dữ liệu. Cũng đừng mã hóa nó. mặt khác, nếu trang web của bạn bị xâm phạm, kẻ tấn công sẽ lấy được khóa giải mã và do đó có thể lấy được tất cả mật khẩu. Mật khẩu PHẢI được băm

Hàm băm mật khẩu có các thuộc tính khác với hàm băm bảng băm hoặc hàm băm mật mã. Không bao giờ sử dụng hàm băm mật mã thông thường như MD5, SHA-256 hoặc SHA-512 trên mật khẩu. Thuật toán băm mật khẩu sử dụng muối, là duy nhất (không được sử dụng cho bất kỳ người dùng nào khác hoặc trong cơ sở dữ liệu của bất kỳ ai khác). Muối là cần thiết để những kẻ tấn công không thể tính toán trước các giá trị băm của các mật khẩu phổ biến. với một loại muối, họ phải bắt đầu lại phép tính cho mọi tài khoản. Thuật toán băm mật khẩu về bản chất là chậm — chậm nhất có thể. Sự chậm chạp làm hại kẻ tấn công nhiều hơn bạn vì kẻ tấn công phải thử nhiều mật khẩu khác nhau. Để biết thêm thông tin, hãy xem Cách băm mật khẩu an toàn

Hàm băm mật khẩu mã hóa bốn mẩu thông tin

  • Một chỉ báo về thuật toán nào được sử dụng. Điều này là cần thiết cho sự nhanh nhẹn. đề xuất mật mã thay đổi theo thời gian. Bạn cần có khả năng chuyển đổi sang một thuật toán mới
  • Chỉ báo độ khó hoặc độ cứng. Giá trị này càng cao thì càng cần nhiều tính toán để tính hàm băm. Đây phải là giá trị cố định hoặc cấu hình chung trong chức năng thay đổi mật khẩu, nhưng giá trị này sẽ tăng theo thời gian khi máy tính hoạt động nhanh hơn, vì vậy bạn cần nhớ giá trị cho từng tài khoản. Một số thuật toán có một giá trị số duy nhất, các thuật toán khác có nhiều tham số hơn ở đó (ví dụ: để điều chỉnh riêng mức sử dụng CPU và mức sử dụng RAM)
  • Muối. Vì muối phải là duy nhất trên toàn cầu nên nó phải được lưu trữ cho từng tài khoản. Muối sẽ được tạo ngẫu nhiên trên mỗi lần thay đổi mật khẩu
  • Băm thích hợp, tôi. e. đầu ra của phép tính toán học trong thuật toán băm

Nhiều thư viện bao gồm một cặp chức năng đóng gói thông tin này dưới dạng một chuỗi một cách thuận tiện. một lấy chỉ báo thuật toán, chỉ báo độ cứng và mật khẩu, tạo ra một loại muối ngẫu nhiên và trả về chuỗi băm đầy đủ; . Không có tiêu chuẩn chung, nhưng mã hóa phổ biến là

$algorithm$parameters$salt$output

trong đó

SELECT PASSWORD('w3resource');

0 là một số hoặc một chuỗi chữ và số ngắn mã hóa sự lựa chọn của thuật toán,
SELECT PASSWORD('w3resource');

1 là một chuỗi có thể in được và
SELECT PASSWORD('w3resource');

2 và
SELECT PASSWORD('w3resource');

3 được mã hóa trong Base64 mà không chấm dứt
SELECT PASSWORD('w3resource');

4

16 byte là đủ cho muối và đầu ra. (Xem đ. g. đề xuất cho Argon2. ) Được mã hóa trong Base64, mỗi ký tự có 21 ký tự. Hai phần còn lại phụ thuộc vào thuật toán và tham số, nhưng 20–40 ký tự là thông thường. Đó là tổng cộng khoảng 82 ký tự ASCII (

SELECT PASSWORD('w3resource');

5 và không cần Unicode), mà bạn nên thêm một giới hạn an toàn nếu bạn nghĩ rằng sẽ khó mở rộng trường sau này

Nếu bạn mã hóa hàm băm ở định dạng nhị phân, bạn có thể giảm nó xuống còn 1 byte cho thuật toán, 1–4 byte cho độ cứng (nếu bạn mã hóa cứng một số tham số) và 16 byte cho mỗi tham số cho muối và đầu ra . Giả sử 40 byte (

SELECT PASSWORD('w3resource');

6) để có ít nhất một vài byte dự phòng. Lưu ý rằng đây là các byte 8 bit, không phải ký tự in được, cụ thể là trường có thể bao gồm các byte rỗng

Kiểu dữ liệu cho mật khẩu trong SQL là gì?

Sử dụng loại dữ liệu SQL CHAR(60) để lưu trữ mã hóa này của hàm băm Bcrypt. Lưu ý rằng chức năng này không mã hóa dưới dạng một chuỗi các chữ số thập lục phân, vì vậy chúng tôi không thể dễ dàng tách nó ra để lưu trữ ở dạng nhị phân.

Loại dữ liệu nào bạn sẽ sử dụng để lưu trữ mật khẩu?

Chúng ta phải luôn lưu trữ thông tin bảo mật trong char[] mảng thay vì Chuỗi. Vì Chuỗi là bất biến nếu chúng ta lưu trữ mật khẩu dưới dạng văn bản thuần túy nên nó sẽ có sẵn trong bộ nhớ cho đến khi trình thu gom rác dọn sạch nó.

Mật khẩu được lưu trữ trong MySQL như thế nào?

MySQL lưu trữ thông tin đăng nhập trong bảng người dùng trong cơ sở dữ liệu hệ thống mysql . Các hoạt động chỉ định hoặc sửa đổi mật khẩu chỉ được phép cho người dùng có đặc quyền CREATE USER hoặc, cách khác, đặc quyền cho cơ sở dữ liệu mysql ( đặc quyền INSERT để tạo tài khoản mới, đặc quyền CẬP NHẬT để sửa đổi tài khoản hiện có).

Tôi có thể sử dụng varchar cho mật khẩu không?

Vì vậy, bạn có thể thấy rằng VARCHAR có lợi nếu độ dài của chuỗi mà bạn đang lưu trữ có thể thay đổi . Lý do tại sao CHAR thường được sử dụng cho các trường mật khẩu là vì đầu ra của thuật toán băm nhất quán bất kể độ dài của đầu vào.