Ví dụ AES_ENCRYPT của MySQL

Chad Smith là Lập trình viên cao cấp của OmniPrepaid LLC có trụ sở tại Pittsburgh, PA. Anh ấy có niềm đam mê với phát triển UX, API, jQuery, CSS, PHP và Symfony2/Doctrine. … Thông tin thêm về Chad Smith ↬

Bản tin email

Email (đập vỡ) của bạn

Mẹo hàng tuần về front-end & UX
Được hơn 200.000 người tin cậy

  • Ví dụ AES_ENCRYPT của MySQL
    Quảng cáo trên tạp chí Smashing

  • Ví dụ AES_ENCRYPT của MySQL
    Hệ thống thiết kế thành công

  • Ví dụ AES_ENCRYPT của MySQL
    Chuẩn bị cho các vai trò giao tiếp ngày nay Thạc sĩ Thiết kế Thông tin của Northwestern

  • Ví dụ AES_ENCRYPT của MySQL
    Giao diện người dùng SmashingConf 2023

  • Ví dụ AES_ENCRYPT của MySQL
    Lớp học tổng thể về nguyên tắc phổ quát của kiểu chữ với Elliot Jay Stocks

Tại công ty chúng tôi, chúng tôi xử lý rất nhiều yêu cầu trên các trang web thẻ quà tặng và phiếu giảm giá hàng đầu trên thế giới. Các nhà phát triển cấp cao đã có một cuộc họp vào cuối tháng 10 để thảo luận về giải pháp sao chép các chức năng MySQL của
new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
1 và
new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
2 bằng ngôn ngữ PHP

Tại công ty chúng tôi, chúng tôi xử lý rất nhiều yêu cầu trên các trang web thẻ quà tặng và phiếu giảm giá hàng đầu trên thế giới. Các nhà phát triển cấp cao đã có một cuộc họp vào cuối tháng 10 để thảo luận về giải pháp sao chép các chức năng MySQL của

new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
1 và
new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
2 bằng ngôn ngữ PHP. Bài viết này tập trung vào những gì được sản xuất bởi nhà phát triển cao cấp Derek Woods và cách sử dụng nó trong các ứng dụng của riêng bạn

Bảo mật phải được đặt lên hàng đầu trong tâm trí của mọi nhà phát triển khi xây dựng một ứng dụng có thể chứa dữ liệu nhạy cảm. Chúng tôi muốn sao chép các chức năng của MySQL vì rất nhiều dữ liệu của chúng tôi đã được mã hóa AES trong cơ sở dữ liệu của chúng tôi và nếu bạn giống chúng tôi, bạn có thể cũng có dữ liệu đó

Đọc thêm trên SmashingMag.

  • HTTPS ở mọi nơi với Nginx, Varnish và Apache
  • Quy trình làm việc đơn giản từ phát triển đến triển khai
  • Tăng tốc cơ sở dữ liệu trang web của bạn
  • Tại sao trình tạo trang web tĩnh là điều quan trọng tiếp theo

Tại sao mã hóa lại quan trọng?

Chúng tôi sẽ bắt đầu bằng cách xem xét lý do tại sao bảo mật và mã hóa lại quan trọng ở tất cả các cấp của ứng dụng. Mọi ứng dụng, dù lớn hay nhỏ, đều cần một số hình thức bảo mật và mã hóa. Bất kỳ dữ liệu người dùng nào bạn có đều cực kỳ có giá trị đối với các tin tặc tiềm năng và cần được bảo vệ. Mã hóa cơ bản nên được sử dụng khi ứng dụng của bạn lưu trữ mật khẩu hoặc một số dạng thông tin nhận dạng khác

Thêm sau khi nhảy. Tiếp tục đọc bên dưới ↓

Gặp gỡ Tối ưu hóa hình ảnh, hướng dẫn thực tế hoàn toàn mới của Addy Osmani để tối ưu hóa và cung cấp hình ảnh chất lượng cao trên web. Từ định dạng và nén đến phân phối và bảo trì. mọi thứ trong một cuốn sách dày 528 trang

Chuyển đến mục lục ↬

Ví dụ AES_ENCRYPT của MySQL

Các mức dữ liệu nhạy cảm khác nhau yêu cầu các thuật toán mã hóa khác nhau. Việc biết mức độ sử dụng có thể được xác định bằng cách trả lời câu hỏi cơ bản, "Liệu tôi có cần truy cập vào dữ liệu gốc sau khi dữ liệu đã được mã hóa không?" . Khi lưu trữ dữ liệu nhạy cảm khác cần được trả về đầu vào ban đầu, bạn sẽ không thể sử dụng thuật toán băm một chiều, chẳng hạn như MD5;

Mã hóa chỉ mạnh bằng khóa được sử dụng để bảo vệ nó. Hãy tưởng tượng rằng kẻ tấn công vi phạm tường lửa của bạn và có một bản sao chính xác cơ sở dữ liệu của bạn; . Giữ chìa khóa ở nơi an toàn phải luôn là ưu tiên số một. Nhiều người sử dụng tệp

new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
5 được đọc trong thời gian chạy và không thể truy cập công khai trong phạm vi của máy chủ Web. Nếu ứng dụng của bạn yêu cầu mã hóa hai chiều, thì có các tiêu chuẩn ngành để bảo vệ dữ liệu đó, một là mã hóa AES

Mã hóa AES là gì?

AES, viết tắt của Advanced Encryption Standard, được phát triển bởi Joan Daemen và Vincent Rijmen. Họ đặt tên cho mật mã của mình là Rijndael, sau khi chơi chữ hai tên của họ. AES được công bố là người chiến thắng trong cuộc thi kéo dài 5 năm do Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) tiến hành vào ngày 26 tháng 11 năm 2001

AES là cơ chế mã hóa và giải mã hai chiều, cung cấp một lớp bảo mật cho dữ liệu nhạy cảm trong khi vẫn cho phép truy xuất dữ liệu gốc. Để làm điều này, nó sử dụng khóa mã hóa được sử dụng làm hạt giống trong thuật toán AES. Miễn là khóa vẫn giữ nguyên, dữ liệu gốc có thể được giải mã. Điều này là cần thiết nếu dữ liệu nhạy cảm của bạn cần được trả về trạng thái ban đầu

Làm thế nào nó hoạt động?

AES sử dụng một thuật toán toán học phức tạp mà chúng ta sẽ khám phá sau, để kết hợp hai khái niệm chính. nhầm lẫn và khuếch tán. Nhầm lẫn là một quá trình che giấu mối quan hệ giữa dữ liệu gốc và kết quả được mã hóa. Một ví dụ cổ điển về điều này là Mật mã Caesar, áp dụng một phép dịch chuyển đơn giản các chữ cái để A trở thành C, B trở thành D, v.v. Truyền bá là một quá trình thay đổi, điều chỉnh hoặc thay đổi dữ liệu theo những cách phức tạp. Điều này có thể được thực hiện bằng cách sử dụng dịch chuyển bit, thay thế, bổ sung, thao tác ma trận, v.v. Sự kết hợp của hai phương pháp này cung cấp lớp bảo mật mà AES cần để cung cấp cho chúng tôi thuật toán bảo mật cho dữ liệu của chúng tôi

Để có tính hai chiều, quá trình nhầm lẫn và phổ biến được quản lý bằng khóa bí mật mà chúng tôi cung cấp cho AES. Chạy thuật toán theo một hướng với một khóa và dữ liệu sẽ xuất ra một chuỗi bị xáo trộn, do đó mã hóa dữ liệu. Bằng cách chuyển chuỗi đó trở lại thuật toán với cùng một khóa, chạy thuật toán ngược lại sẽ xuất dữ liệu gốc. Thay vì cố gắng giữ bí mật thuật toán, thuật toán AES dựa vào bí mật khóa hoàn toàn. Theo đó, OWASP khuyên bạn nên xoay khóa từ một đến ba năm một lần. Các hướng dẫn cũng đi qua các phương pháp xoay phím AES

Chi tiết cụ thể về PHP Mcrypt

PHP cung cấp triển khai AES thông qua tiện ích mở rộng Mcrypt, tiện ích này cũng cung cấp cho chúng tôi một số mật mã khác. Ngoài bản thân thuật toán, Mcrypt còn cung cấp nhiều chế độ thay đổi mức độ bảo mật của thuật toán AES để làm cho nó an toàn hơn. Hai định nghĩa mà chúng ta sẽ cần sử dụng trong các hàm PHP của mình là

new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
6 và
new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
7. Rijndael 256 là mật mã mã hóa mà chúng tôi sẽ sử dụng để mã hóa AES của mình. Ngoài ra, mã này sử dụng “Sổ mã điện tử” để phân đoạn dữ liệu thành các khối và mã hóa chúng một cách riêng biệt. Có sẵn các chế độ thay thế và an toàn hơn, nhưng MySQL sử dụng ECB theo mặc định, vì vậy chúng tôi sẽ xây dựng triển khai PHP xung quanh đó

Tại sao bạn nên tránh AES trong MySQL?

Sử dụng chức năng mã hóa và giải mã AES của MySQL rất đơn giản. Quá trình thiết lập đòi hỏi ít công việc hơn và nhìn chung dễ hiểu hơn nhiều. Ngoài lợi ích rõ ràng của sự đơn giản, có ba lý do chính khiến Mcrypt của PHP vượt trội hơn các chức năng AES của MySQL

  1. MySQL cần một liên kết cơ sở dữ liệu giữa ứng dụng và cơ sở dữ liệu để mã hóa và giải mã xảy ra. Điều này có thể dẫn đến các vấn đề về khả năng mở rộng không cần thiết và các lỗi nghiêm trọng nếu cơ sở dữ liệu gặp lỗi nội bộ, do đó khiến ứng dụng của bạn không sử dụng được
  2. PHP có thể thực hiện giải mã và mã hóa MySQL tương tự với một số nỗ lực nhưng không cần kết nối cơ sở dữ liệu, giúp cải thiện tốc độ và hiệu quả của ứng dụng
  3. MySQL thường ghi lại các giao dịch, vì vậy nếu máy chủ của cơ sở dữ liệu đã bị xâm phạm, thì tệp nhật ký sẽ tạo ra cả khóa mã hóa và giá trị ban đầu

Sửa đổi khóa AES của MySQL

Rất tiếc, các chức năng Mcrypt của PHP không cung cấp các chuỗi được mã hóa khớp với các chuỗi của MySQL. Có một vài lý do cho điều này, nhưng nguyên nhân gốc rễ của sự khác biệt là cách mà MySQL xử lý cả khóa và đầu vào. Để hiểu nguyên nhân, chúng ta phải đi sâu vào thuật toán mã hóa AES mặc định của MySQL. Các đoạn mã được trình bày bên dưới đã được thử nghiệm lên phiên bản mới nhất của MySQL, nhưng MySQL có thể thay đổi sơ đồ mã hóa của chúng. Vấn đề đầu tiên mà chúng tôi gặp phải là MySQL sẽ chia khóa bí mật của chúng tôi thành các khối 16 byte và XOR các ký tự với nhau từ trái sang phải. XOR là một sự phân tách độc quyền và nếu hai byte giống nhau, thì đầu ra là

new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
8; . Ngoài ra, nó bắt đầu bằng một khối ký tự null 16 byte, vì vậy nếu chúng ta chuyển vào khóa có ít hơn 16 byte, thì phần còn lại của khóa sẽ chứa ký tự null

Giả sử chúng tôi có khóa 34 ký tự.

new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI
0. MySQL sẽ bắt đầu với 16 ký tự đầu tiên

new_key = 123456789abcdefg

Bước thứ hai được thực hiện là XOR (⊕) 16 ký tự tiếp theo trong giá trị trong

new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI
1 với 16 ký tự đầu tiên

new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI

Cuối cùng, hai ký tự còn lại sẽ được XOR'd bắt đầu từ bên trái

new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI

Tất nhiên, điều này khác rất nhiều so với khóa ban đầu của chúng ta, vì vậy nếu quá trình này không diễn ra, thì giá trị trả về từ các hàm giải mã/mã hóa sẽ không chính xác

Đệm phím

Sự khác biệt lớn thứ hai giữa Mcrypt PHP và MySQL là độ dài của giá trị Mcrypt phải có phần đệm để đảm bảo nó là bội số của 16 byte. Có nhiều cách để thực hiện việc này, nhưng tiêu chuẩn là đệm khóa có giá trị byte bằng với số byte còn lại. Vì vậy, nếu giá trị của chúng tôi là 34 ký tự, thì chúng tôi sẽ đệm với giá trị byte là 14

Để tính toán điều này, chúng tôi sử dụng công thức sau

$pad_value = 16-(strlen($value) % 16);

Sử dụng ví dụ 34 ký tự của chúng tôi, chúng tôi sẽ kết thúc với điều này

$pad_value = 16-(strlen("123456789abcdefghijklmnopqrstuvwxy") % 16);
$pad_value = 16-(34 % 16);
$pad_value = 16-(2);
$pad_value = 14;

Chức năng chính của MySQL

Trong phần trước, chúng ta đã đi sâu vào các vấn đề xoay quanh khóa MySQL dùng để mã hóa và giải mã. Dưới đây là chức năng được sử dụng trong cả chức năng mã hóa và giải mã của chúng tôi

function mysql_aes_key($key)
{
    $new_key = str_repeat(chr(0), 16);
    for($i=0,$len=strlen($key);$i<$len;$i++)
    {
        $new_key[$i%16] = $new_key[$i%16] ^ $key[$i];
    }
    return $new_key;
}

Đầu tiên, chúng tôi khởi tạo giá trị khóa của mình bằng 16 ký tự null. Sau đó, chúng tôi lặp qua từng ký tự trong khóa và XOR nó với vị trí hiện tại trong

new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI
1. Vì chúng tôi đang di chuyển từ trái sang phải và sử dụng mô-đun 16, chúng tôi sẽ luôn XOR các ký tự chính xác cùng nhau. Chức năng này thay đổi khóa bí mật của chúng tôi thành tiêu chuẩn MySQL và là bước đầu tiên để đạt được khả năng tương tác giữa PHP và MySQL

Chuyển đổi giá trị

Chúng tôi gặp phải cảnh báo cuối cùng khi lấy dữ liệu từ MySQL. Đối với dữ liệu được mã hóa bằng AES, các giá trị được đệm mà chúng tôi đã thêm trước khi mã hóa sẽ vẫn được xử lý ở cuối sau khi chúng tôi giải mã. Nói chung, điều này sẽ không được chú ý nếu chúng tôi chỉ tìm nạp dữ liệu để hiển thị nó; . Có một số cách để xử lý việc này và chúng tôi sẽ xóa tất cả các ký tự có vị trí byte từ 0 đến 16 ở bên phải giá trị của chúng tôi vì chúng là các ký tự duy nhất được sử dụng trong thuật toán đệm của chúng tôi

Đoạn mã dưới đây sẽ xử lý việc chuyển đổi

$decrypted_value = rtrim($decrypted_value, "..16");

Ném tất cả các khái niệm lại với nhau, chúng tôi có một vài điểm chính

  1. Chúng tôi phải chuyển đổi khóa AES của mình theo tiêu chuẩn của MySQL;
  2. Chúng tôi phải đệm giá trị mà chúng tôi muốn mã hóa nếu nó không phải là bội số của kích thước 16 byte;
  3. Chúng tôi phải loại bỏ các giá trị được đệm sau khi giải mã giá trị được mã hóa từ MySQL

Thật thuận lợi khi phân đoạn các khái niệm này thành các thành phần có thể được sử dụng lại trong suốt dự án và trong các lĩnh vực khác sử dụng mã hóa AES. Hai chức năng sau là kết quả cuối cùng và thực hiện mã hóa và giải mã trước khi gửi dữ liệu đến MySQL để lưu trữ

Mã hóa AES của MySQL

function aes_encrypt($val)
{
    $key = mysql_aes_key('Ralf_S_Engelschall__trainofthoughts');
    $pad_value = 16-(strlen($val) % 16);
    $val = str_pad($val, (16*(floor(strlen($val) / 16)+1)), chr($pad_value));
    return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $val, MCRYPT_MODE_ECB, mcrypt_create_iv( mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_DEV_URANDOM));
}

Dòng đầu tiên là nơi chúng tôi lấy khóa được mã hóa MySQL bằng cách sử dụng hàm

new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI
4 đã xác định trước đó. Chúng tôi không sử dụng khóa thực của mình trong bài viết này mà thay vào đó, chúng tôi bày tỏ lòng kính trọng đối với một trong những người tạo ra OpenSSL (trong số các công nghệ khác mà anh ấy đã tham gia). Dòng tiếp theo xác định giá trị ký tự để đệm dữ liệu của chúng tôi. Hai dòng cuối cùng thực hiện phần đệm thực tế của dữ liệu của chúng tôi và gọi hàm
new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI
5 với khóa và giá trị thích hợp. Kết quả trả về của hàm này sẽ là giá trị được mã hóa có thể được gửi tới MySQL để lưu trữ — hoặc được sử dụng ở bất kỳ nơi nào khác yêu cầu dữ liệu được mã hóa

Giải mã MySQL AES

function aes_decrypt($val)
{
    $key = mysql_aes_key('Ralf_S_Engelschall__trainofthoughts');
    $val = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $val, MCRYPT_MODE_ECB, mcrypt_create_iv( mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_DEV_URANDOM));
    return rtrim($val, "..16");
}

Dòng đầu tiên của chức năng giải mã tạo lại phiên bản MySQL của khóa bí mật của chúng tôi bằng cách sử dụng

new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI
4. Sau đó, chúng tôi chuyển khóa đó cùng với dữ liệu được mã hóa đến hàm
new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI
7. Dòng cuối cùng trả về dữ liệu gốc sau khi loại bỏ bất kỳ ký tự đệm nào mà chúng tôi có thể đã sử dụng trong quá trình mã hóa

Xem nó trong hành động

Để chứng minh rằng các sơ đồ mã hóa và giải mã ở đây thực sự hoạt động, chúng ta phải thực hiện cả chức năng mã hóa và giải mã trong PHP và MySQL và so sánh các kết quả. Trong ví dụ này, chúng tôi đã tích hợp chức năng khóa và khóa

new_key = new_key ^ xy
new_key =  Y[Y_Y[YWI ^ xy
new_key = !"Y_Y[YWI
8/_______9_______9 vào mô hình CakePHP và chúng tôi đang sử dụng Cake để chạy các truy vấn cơ sở dữ liệu cho MySQL. Bạn có thể thay thế các hàm CakePHP bằng
$pad_value = 16-(strlen($value) % 16);
0 để nhận kết quả bên ngoài Cake. Trong nhóm đầu tiên, chúng tôi đang mã hóa cùng một dữ liệu với cùng một khóa trong cả PHP và MySQL. Sau đó, chúng tôi
$pad_value = 16-(strlen($value) % 16);
1 kết quả và in dữ liệu. Nhóm thứ hai chạy dữ liệu được mã hóa MySQL thông qua giải mã PHP và ngược lại đối với dữ liệu được mã hóa PHP. Chúng tôi cũng đang xuất kết quả. Khối cuối cùng đảm bảo rằng đầu vào và đầu ra giống hệt nhau

define('MY_KEY','Ralf_S_Engelschall__trainofthoughts');

// Group 1
$a = $this->User->aes_encrypt('test');
echo base64_encode($a).'
';

$result = $this->User->query("SELECT AES_ENCRYPT('test', '".MY_KEY."') AS enc");
$b = $result[0][0]['enc'];
echo base64_encode($b).'
';

// Group 2
$result = $this->User->query("SELECT AES_DECRYPT('".$a."', '".MY_KEY."') AS decc");
$c = $result[0][0]['decc'];
echo $c."
";

$d = $this->User->aes_decrypt($b);
echo $d."
";

// Comparison
var_dump($a===$b);
var_dump($c===$d);

đầu ra

Đoạn mã bên dưới là kết quả khi bạn chạy các lệnh PHP được liệt kê ở trên

new_key = new_key ^ hijklmnopqrstuvw
new_key = 123456789abcdefg ^ hijklmnopqrstuvw
new_key = Y[Y_Y[YWI
0

Suy nghĩ cuối cùng

Mã hóa AES có thể hơi khó khăn nếu bạn không quen thuộc với các chi tiết cụ thể của thuật toán hoặc quen thuộc với bất kỳ sự khác biệt nào giữa các triển khai mà bạn có thể phải làm việc với các thư viện và gói phần mềm khác nhau của mình. Như bạn có thể thấy, thực sự có thể sử dụng các hàm PHP gốc để xử lý mã hóa và giải mã và thực sự làm cho nó hoạt động liền mạch với bất kỳ dữ liệu được mã hóa chỉ MySQL kế thừa nào mà ứng dụng của bạn có thể có. Các phương pháp này nên được sử dụng bất kể để bạn có thể sử dụng MySQL để giải mã dữ liệu nếu một kịch bản phát sinh trong đó đó là tùy chọn duy nhất

Làm cách nào để mã hóa văn bản trong MySQL?

Hàm AES_ENCRYPT của MySQL được sử dụng để mã hóa chuỗi bằng thuật toán Tiêu chuẩn mã hóa nâng cao (AES). Hàm MySQL AES_ENCRYPT mã hóa dữ liệu với độ dài khóa 128 bit nhưng nó có thể được mở rộng lên tới độ dài khóa 256 bit. Nó mã hóa một chuỗi và trả về một chuỗi nhị phân.

Làm cách nào để giải mã mã hóa AES trong MySQL?

Hàm MySQL AES_DECRYPT trả về chuỗi gốc sau khi giải mã chuỗi được mã hóa. Nó sử dụng thuật toán AES (Advanced Encryption Standard) để thực hiện giải mã. Hàm AES_DECRYPT trả về chuỗi đã giải mã hoặc NULL nếu phát hiện dữ liệu không hợp lệ

Làm cách nào để chèn dữ liệu được mã hóa trong MySQL?

Để kích hoạt mã hóa cho vùng bảng hệ thống mysql, 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 để mã hóa trường mật khẩu trong MySQL?

Máy chủ MySQL sử dụng chức năng MẬT KHẨU để mã hóa mật khẩu MySQL để lưu trữ trong cột Mật khẩu của bảng cấp người dùng. Giá trị do hàm MẬT KHẨU trả về là một chuỗi được băm hoặc NULL nếu đối số là NULL. Hàm MẬT KHẨU nhận một tham số là chuỗi cần mã hóa.