Hàm MySQL ENCRYPT[] được sử dụng để mã hóa một chuỗi bằng UNIX crypt[] và trả về giá trị được mã hóa của chuỗi. Hàm này sử dụng muối trong quá trình mã hóa và muối phải dài ít nhất 2 ký tự. Nếu muối không được cung cấp, hàm này sẽ sử dụng một giá trị ngẫu nhiên là muối. Trong trường hợp đặc biệt, nó trả về như sau
- Trả về NULL nếu muối có độ dài dưới 2 ký tự
- Trả về NULL nếu chuỗi là NULL
- Trả về NULL nếu UNIX crypt[] không có trên hệ thống
cú pháp
Thông số
string
Required.
Chỉ định chuỗi văn bản gốc được mã hóa bằng UNIX crypt[]. salt
Optional.
Chỉ định chuỗi phải dài ít nhất 2 ký tự. Nó được sử dụng trong quá trình mã hóa. Nếu nó không được cung cấp, chức năng này sẽ sử dụng một giá trị ngẫu nhiên
Máy chủ Percona cho MySQL 8. 0. 28-20 thêm chức năng mã hóa và các biến để quản lý phạm vi mã hóa. Các hàm có thể lấy một đối số thuật toán. Mã hóa chuyển đổi bản rõ thành bản mã bằng khóa và thuật toán mã hóa
Bạn cũng có thể sử dụng các chức năng do người dùng định nghĩa với các khóa định dạng PEM do tiện ích OpenSSL tạo bên ngoài
Thông báo sử dụng văn bản gốc và tạo ra giá trị băm. Giá trị băm này có thể xác minh xem bản rõ có bị sửa đổi hay không. Bạn cũng có thể ký tên hoặc xác minh trên bản tóm tắt để đảm bảo rằng văn bản gốc không bị sửa đổi. Bạn không thể giải mã văn bản gốc từ giá trị băm
Khi chọn độ dài khóa, hãy xem xét những điều sau
Độ mạnh mã hóa tăng theo kích thước khóa và đồng thời, thời gian tạo khóa
Nếu hiệu suất là quan trọng và các chức năng được sử dụng thường xuyên, hãy sử dụng mã hóa đối xứng. Hàm mã hóa đối xứng nhanh hơn hàm mã hóa bất đối xứng. Hơn nữa, mã hóa bất đối xứng có những hạn chế về độ dài tối đa của tin nhắn được mã hóa. Ví dụ: đối với RSA, kích thước thông báo tối đa của thuật toán là độ dài khóa tính bằng byte [độ dài khóa tính bằng bit / 8] trừ đi 11
Bảng và các phần sau đây mô tả các chức năng. Ví dụ, xem chức năng ví dụ
Tên chức năngBảng sau đây mô tả các biến Ngưỡng mã hóa có thể được sử dụng để đặt giá trị tối đa cho độ dài khóa dựa trên loại mã hóa
Tên biếnCài đặt thành phần_encryption_udf
Sử dụng Câu lệnh thành phần cài đặt để thêm thành phần component_encryption_udf. Các hàm và biến có sẵn. Các hàm do người dùng xác định và các biến Ngưỡng mã hóa được đăng ký tự động. Không có yêu cầu để gọi CREATE FUNCTION .. SONAME ...
Cần có đặc quyền INSERT
trên bảng hệ thống mysql.component
để chạy câu lệnh
-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
0. Để đăng ký thành phần, thao tác thêm một hàng vào bảng nàySau đây là một ví dụ về lệnh cài đặt
mysql> INSTALL COMPONENT 'file://component_encryption_udf';
Ghi chú
Nếu bạn đang Biên dịch Máy chủ Percona cho MySQL từ Nguồn, thì thành phần Mã hóa UDF được tạo theo mặc định khi Máy chủ Percona cho MySQL được tạo. Chỉ định tùy chọn cmake
-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
1 để loại trừ nóCác chức năng do người dùng xác định được mô tả
bất đối xứng_decrypt[thuật toán, crypt_str, key_str]
Giải mã một chuỗi được mã hóa bằng thuật toán và chuỗi khóa
trả lại
Một bản rõ dưới dạng một chuỗi
Thông số
Sau đây là các tham số của hàm
thuật toán - thuật toán mã hóa hỗ trợ RSA để giải mã chuỗi
key_str - một chuỗi ở định dạng PEM. Chuỗi khóa phải có các thuộc tính sau
Có hiệu lực
Chuỗi khóa công khai hoặc riêng tư tương ứng với chuỗi khóa riêng tư hoặc công khai được sử dụng với hàm asymmetric_encrypt
bất đối xứng_derive[pub_key_str, priv_key_str]
Tạo khóa đối xứng bằng cách sử dụng khóa chung được tạo ở một bên và khóa riêng được tạo ở bên kia
đầu ra bất đối xứng
Khóa dưới dạng chuỗi nhị phân
tham số asymmetric_derive
-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
2 phải là khóa công khai ở định dạng PEM và được tạo bằng thuật toán Diffie-Hellman [DH]-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
3 phải là khóa riêng ở định dạng PEM và được tạo bằng thuật toán Diffie-Hellman [DH]mã hóa bất đối xứng [thuật toán, chuỗi, keystr]
Mã hóa một chuỗi bằng thuật toán và chuỗi khóa
đầu ra asymmetric_encrypt
Bản mã dưới dạng chuỗi nhị phân
tham số asymmetric_encrypt
Các thông số như sau
thuật toán - thuật toán mã hóa hỗ trợ RSA để mã hóa chuỗi
str - được đo bằng byte. Độ dài của chuỗi không được lớn hơn độ dài mô-đun key_str tính bằng byte - 11 [byte bổ sung được sử dụng cho phần đệm PKCS1]
key_str - một khóa [riêng tư hoặc công khai] ở định dạng PEM
asymmetric_sign[thuật toán, digest_str, priv_key_str, digest_type]
Ký chuỗi thông báo bằng chuỗi khóa riêng
đầu ra asymmetric_sign
Chữ ký là một chuỗi nhị phân
tham số asymmetric_sign
Các thông số như sau
thuật toán - thuật toán mã hóa hỗ trợ RSA hoặc DSA để mã hóa chuỗi
digest_str - chuỗi nhị phân thông báo được ký. Gọi create_digest tạo thông báo
priv_key_str - khóa riêng được sử dụng để ký chuỗi thông báo. Khóa phải ở định dạng PEM
digest_type - phiên bản OpenSSL được cài đặt trên hệ thống của bạn xác định các hàm băm khả dụng. Bảng sau liệt kê các chức năng này
OpenSSL 1. 0. 2OpenSSL 1. 1. 0OpenSSL 1. 1. 1OpenSSL 3. 0. xmd5md5md5md5sha1sha1sha1sha1sha224sha224sha224sha224sha384sha384sha384sha384sha512sha512sha512sha512md4md4md4md4shamd5-sha1md5-sha1md5-sha1ripemd160ripemd160ripemd160sha512-224whirlpoolwhirlpoolsha512-224sha512-256blake2b512sha512-256sha3-224blake2s256whirlpoolsha3-256sm3sha3-384blake2b512sha3-512blake2s256sha3-224sha3-384sha3-512shake128shake256
asymmetric_verify[thuật toán, digest_str, sig_str, pub_key_str, digest_type]
Xác minh xem chuỗi chữ ký có khớp với chuỗi thông báo hay không
đầu ra asymmetric_verify
Một
-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
4 [thành công] hoặc một -- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
5 [thất bại]tham số asymmetric_verify
Các thông số như sau
thuật toán - hỗ trợ ‘RSA’ hoặc ‘DSA’
digest_str - gọi create_digest tạo ra chuỗi nhị phân thông báo này
sig_str - chuỗi nhị phân chữ ký. Gọi asymmetric_sign tạo ra chuỗi này
pub_key_str - chuỗi khóa công khai của người ký. Chuỗi này phải tương ứng với khóa riêng được chuyển đến asymmetric_sign để tạo chuỗi chữ ký. Chuỗi phải ở định dạng PEM
digest_type - các giá trị được hỗ trợ được liệt kê trong bảng loại thông báo của create_digest
create_asymmetric_priv_key[thuật toán, [key_len. dh_tham số]]
Tạo khóa riêng bằng thuật toán đã cho và độ dài khóa cho các tham số RSA hoặc DSA hoặc Diffie-Hellman cho DH. Đối với RSA hoặc DSA, nếu cần, hãy thực thi
-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
6 để chấm dứt quá trình tạo khóa lâu dài. Tạo khóa DH từ các tham số hiện có là một thao tác nhanh. Do đó, không có ý nghĩa gì khi chấm dứt hoạt động đó với -- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
7đầu ra create_asymmetric_priv_key
Khóa dưới dạng chuỗi ở định dạng PEM
tham số create_asymmetric_priv_key
Các thông số như sau
thuật toán - các giá trị được hỗ trợ là 'RSA', 'DSA' hoặc 'DH'
key_len - các giá trị độ dài khóa được hỗ trợ như sau
RSA - độ dài tối thiểu là 1.024. Chiều dài tối đa là 16.384
DSA - chiều dài tối thiểu là 1,024. Chiều dài tối đa là 9,984
Ghi chú
Giới hạn độ dài khóa được xác định bởi OpenSSL. Để thay đổi độ dài khóa tối đa, hãy sử dụng hoặc mã hóa_udf. rsa_bits_threshold hoặc mã hóa_udf. dsa_bits_threshold
dh_parameters - Tham số Diffie-Hellman [DH]. Gọi create_dh_parameter tạo các tham số DH
create_asymmetric_pub_key[thuật toán, priv_key_str]
Lấy khóa công khai từ khóa riêng đã cho bằng thuật toán đã cho
đầu ra create_asymmetric_pub_key
Khóa dưới dạng chuỗi ở định dạng PEM
tham số create_asymmetric_pub_key
Các thông số như sau
thuật toán - các giá trị được hỗ trợ là 'RSA', 'DSA' hoặc 'DH'
priv_key_str - phải là chuỗi khóa hợp lệ ở định dạng PEM
tạo_dh_tham số [key_len]
Tạo các tham số để tạo cặp khóa riêng/công khai Diffie-Hellman [DH]. Nếu cần, hãy thực thi
-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
6 để chấm dứt việc tạo các tham số lâu dàiViệc tạo các tham số DH có thể mất nhiều thời gian hơn so với việc tạo các khóa RSA hoặc khóa DSA. OpenSSL xác định giới hạn độ dài tham số. Để thay đổi độ dài tham số tối đa, hãy sử dụng mã hóa_udf. dh_bits_threshold
đầu ra create_dh_parameters
Một chuỗi ở định dạng PEM và có thể được chuyển đến create_asymmetric_private_key
tham số create_dh_parameters
Các thông số như sau
- key_len - phạm vi cho độ dài khóa là từ 1024 đến 10.000. Giá trị mặc định là 10.000
create_digest[digest_type, str]
Tạo một thông báo từ chuỗi đã cho bằng cách sử dụng loại thông báo đã cho. Chuỗi thông báo có thể được sử dụng với asymmetric_sign và asymmetric_verify
đầu ra create_digest
Bản tóm tắt của chuỗi đã cho dưới dạng chuỗi nhị phân
tham số create_digest
Các thông số như sau
digest_type - phiên bản OpenSSL được cài đặt trên hệ thống của bạn xác định các hàm băm khả dụng. Bảng sau liệt kê các chức năng này
OpenSSL 1. 0. 2OpenSSL 1. 1. 0OpenSSL 1. 1. 1OpenSSL 3. 0. xmd5md5md5md5sha1sha1sha1sha1sha224sha224sha224sha224sha384sha384sha384sha384sha512sha512sha512sha512md4md4md4md4shamd5-sha1md5-sha1md5-sha1ripemd160ripemd160ripemd160sha512-224whirlpoolwhirlpoolsha512-224sha512-256blake2b512sha512-256sha3-224blake2s256whirlpoolsha3-256sm3sha3-384blake2b512sha3-512blake2s256sm3sha3-224blake2b512sha3-384blake2s256sha3-512blake2b512shake128blake2s256shake256str - Chuỗi được sử dụng để tạo chuỗi thông báo
biến ngưỡng mã hóa
Giới hạn độ dài khóa tối đa được xác định bởi OpenSSL. Quản trị viên máy chủ có thể giới hạn độ dài khóa tối đa bằng cách sử dụng các biến ngưỡng mã hóa
Các biến được đăng ký tự động khi component_encryption_udf được cài đặt
Tên biếnencryption_udf. dh_bits_threshold-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
9
-- Set Global variable
mysql> SET GLOBAL encryption_udf.dh_bits_threshold = 4096;
-- Set Global variable
mysql> SET GLOBAL encryption_udf.rsa_bits_threshold = 4096;
Biến đặt giới hạn tối đa cho hàm create_dh_parameters do người dùng xác định và được ưu tiên hơn giá trị độ dài tối đa của OpenSSL
OptionDescriptioncommand-lineYesscopeGlobaldata typeunsigned integerdefault10000Phạm vi cho biến này là từ 1024 đến 10.000. Giá trị mặc định là 10.000
mã hóa_udf. dsa_bits_threshold
Biến đặt giới hạn ngưỡng cho hàm do người dùng xác định create_asymmetric_priv_key khi hàm được gọi với tham số RSA và được ưu tiên hơn giá trị độ dài tối đa của OpenSSL