MySQL函數提供了非對稱加解密服務的實現,非對稱加密是指加密和解密使用的不是同樣的秘鑰,一般公鑰用于加密,私鑰用于解密。MySQL函數實現非對稱加解密需要用到RSA算法,該算法是公鑰加密算法中的一種,其秘鑰長度可以自行指定,一般地,秘鑰越長加密時耗費時間越長,但也越難破解。
-- 創建公私鑰對 openssl genrsa -out private_key.pem 2048 openssl rsa -in private_key.pem -pubout -out public_key.pem -- 將私鑰讀入MySQL SET @pri_key:= load_file('/path/to/private_key.pem'); -- 將公鑰讀入MySQL SET @pub_key:= load_file('/path/to/public_key.pem'); -- 加密 CREATE FUNCTION `rsa_encrypt`(IN `plain_text` MEDIUMTEXT) RETURNS TEXT CHARSET utf8 COLLATE utf8_unicode_ci DETERMINISTIC BEGIN DECLARE `encrypted_text` TEXT CHARSET utf8 COLLATE utf8_unicode_ci; SET `encrypted_text`:= TO_BASE64(RSA_ENCRYPT(`plain_text`, @pub_key)); RETURN `encrypted_text`; END; -- 解密 CREATE FUNCTION `rsa_decrypt`(IN `encrypted_text` MEDIUMTEXT) RETURNS TEXT CHARSET utf8 COLLATE utf8_unicode_ci DETERMINISTIC BEGIN DECLARE `plain_text` TEXT CHARSET utf8 COLLATE utf8_unicode_ci; SET `plain_text`:= CAST(RSA_DECRYPT(FROM_BASE64(`encrypted_text`), @pri_key) AS CHAR); RETURN `plain_text`; END;