Hướng dẫn mã hóa trong mysql

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm ENCRYPT trong MySQL thông qua cú pháp và ví dụ thực tế.

Show

Hướng dẫn mã hóa trong mysql

Hướng dẫn mã hóa trong mysql

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Mô tả

Hàm ENCRYPT được sử dụng để mã hóa một chuỗi bằng UNIX crypt().

2. Cú pháp

Cú pháp của hàm ENCRYPT trong MySQL là:

ENCRYPT( string [, salt ] )

Trong đó:

Bài viết này được đăng tại [free tuts .net]

  • string: Chuỗi ký tự được mã hóa bằng UNIX crypt ().
  • salt: Không bắt buộc. Chuỗi dài ít nhất 2 ký tự được sử dụng trong quá trình mã hóa. Nếu salt không được cung cấp, hàm ENCRYPT sẽ sử dụng một giá trị ngẫu nhiên.

Lưu ý:

  • Hàm ENCRYPT sẽ trả về NULL, nếu salt có độ dài dưới 2 ký tự.
  • Hàm ENCRYPT sẽ trả về NULL, nếu chuỗi là NULL.
  • Hàm ENCRYPT sẽ trả về NULL, nếu UNIX crypt() không có sẵn trên hệ thống của bạn.

3. Version

Hàm ENCRYPT có thể được sử dụng trong các phiên bản sau của MySQL:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1

4. Ví dụ

mysql> SELECT ENCRYPT('1a2b3c4d');
Ket qua: 'eBEbmmO29ZhNc'

mysql> SELECT ENCRYPT('SESRFT345#');
Ket qua: 'sB9Ks.FMuxnMk'

mysql> SELECT ENCRYPT('freetuts.net');
Ket qua: '3CaTClvDNYZIw'

mysql> SELECT ENCRYPT('freetuts.net', 'test');
Ket qua: 'tephWUP2dcpg.'

mysql> SELECT ENCRYPT('freetuts.net', '2');
Ket qua: NULL

mysql> SELECT ENCRYPT(NULL);
Ket qua: NULL

Đây sẽ là một trong những bài viết quan trọng nhất đối với cộng đồng MySQL vì tôi sẽ chia sẻ, thực tiễn tốt nhất của chúng ta để lưu trữ mật khẩu được mã hóa vào Máy chủ cơ sở dữ liệu MySQL.

MySQL cung cấp thuật toán và chức năng khác nhau để mã hóa và giải mã dữ liệu mật khẩu hoặc bất kỳ thông tin nhạy cảm nào khác để không ai có thể truy cập nó ở định dạng văn bản thuần túy.

Đối với các chức năng Mã hóa và Nén khác nhau, bạn có thể truy cập trang web chính thức của Nhà phát triển MySQL này.

Nói chung, mọi người đang sử dụng thuật toán MD5 và SHA để mã hóa mật khẩu, nhưng cả hai đều dễ bị phá vỡ và dễ bị tấn công, vì vậy chúng ta không nên sử dụng thuật toán này trong thực tế chung của mình.

Chúng ta cũng không nên sử dụng hàm PASSWORD () vì nó được sử dụng bởi hệ thống xác thực trong MySQL Server.

Thuật toán chuẩn mã hóa nâng cao (AES):

Đây là một trong những thuật toán mã hóa quan trọng và có tính bảo mật cao vì nó mã hóa chuỗi bằng cách sử dụng chuỗi khóa mã hóa và trả về đầu ra chuỗi nhị phân được mã hóa.

MySQL cung cấp AES_ENCRYPT () để mã hóa chuỗi ở định dạng nhị phân và AES_DECRYPT () để giải mã chuỗi ở dạng văn bản thuần túy.

Vấn đề duy nhất là, chúng ta nên ẩn giá trị khóa vì mục đích bảo mật bằng cách đặt quyền cấp đối tượng hoặc chúng ta có thể tạo một chế độ xem để ẩn giá trị khóa mã hóa.

Bạn có thể tạo kiểu dữ liệu BINARY hoặc BLOB để lưu trữ mật khẩu được mã hóa AES.

Dưới đây là một minh chứng nhỏ về điều này:

Cú pháp:

AES_ENCRYPT(str,key_str)

AES_DECRYPT(crypt_str,key_str)

Đầu tiên, tạo một bảng với dữ liệu mẫu:

CREATE TABLE tbl_AESPassword

(

ID INTEGER

,UserPassword BLOB

);

INSERT INTO tbl_AESPassword

VALUES

(1,AES_ENCRYPT('Anvesh','8'))

,(2,AES_ENCRYPT('Patel','88'));

CHỌN hàng đầu tiên bằng cách so sánh mật khẩu sử dụng khóa mã hóa đã xác định:

SELECT *

FROM tbl_AESPassword

WHERE UserPassword = AES_ENCRYPT('Anvesh','8')

-- Result: Returned only first record.

ID | UserPassword

---------------------------

1 | BLOB

ĐỂ XÁC ĐỊNH mật khẩu thành văn bản thuần túy:

mysql> SELECT AES_DECRYPT(AES_ENCRYPT('Anvesh','8'),'8');

+--------------------------------------------+

| AES_DECRYPT(AES_ENCRYPT('Anvesh','8'),'8') |

+--------------------------------------------+

| Anvesh |

+--------------------------------------------+

1 row in set (0.00 sec)