支援的加密和壓縮函數
PolarDB-X目前支援mysql 5.7的大部分未過時的加密和壓縮函數,具體資訊見下表:
函數名 | 描述 |
AES_DECRYPT | 使用AES算法解密 |
AES_ENCRYPT | 使用AES算法加密 |
RANDOM_BYTES | 傳回随機位元組向量 |
MD5 | 計算MD5 128位校驗和 |
SHA1, SHA | 計算SHA-1 160位校驗和 |
SHA2 | 計算SHA2校驗和 |
對于加密和壓縮函數,如果需要存儲位元組類型的傳回結果,推薦使用VARBINARY或BLOB字段,避免尾部空白字元的移除或字元集轉換問題(如CHAR/VARCHAR/TEXT類型)。
AES_DECRYPT(crypt_str, key_str [, init_vector])
根據輸入的密文crypt_str、密鑰key_str以及初始向量init_vector(可選參數),傳回解密後的明文結果。具體解密算法與使用方法可參考
函數。
AES_ENCRYPT(str, key_str [, init_vector])
根據輸入的明文str、密鑰key_str以及初始向量init_vector(可選參數),傳回加密後的密文結果。在加密時具體使用的AES算法由系統變量
block_encryption_mode決定,該變量取值的格式為
aes-keylen-mode
,其中keylen為密鑰的位長度(合法取值為128/192/256),mode為加密模式,PolarDB-X支援以下六種加密模式:
加密模式 | 是否需要初始向量 |
ECB | 否 |
CBC | 是 |
CFB1 | |
CFB8 | |
CFB128 | |
OFB |
對于需要初始向量的加密模式,初始向量必須大于等于16位元組(超出16位元組部分将自動截斷);對于不需要初始向量的加密模式,初始向量參數将被自動忽略。
示例:
mysql> SET block_encryption_mode = 'aes-128-ofb';
mysql> SET @iv = RANDOM_BYTES(16);
mysql> SET @key = SHA2('secret key', 224);
mysql> set @crypto = AES_ENCRYPT('polardb-x', @key, @iv);
mysql> select @crypto;
+---------------------------+
| @crypto |
+---------------------------+
| ß÷s,(ÿýÂåîA}ýO |
+---------------------------+
mysql> SELECT AES_DECRYPT(@crypto, @key, @iv);
+---------------------------------+
| AES_DECRYPT(@crypto, @key, @iv) |
+---------------------------------+
| polardb-x |
+---------------------------------+
RANDOM_BYTES(len)
傳回len位元組長度的随機二進制字元串,長度len的合法取值為1~1024。
mysql> select HEX(RANDOM_BYTES(16));
+----------------------------------+
| HEX(RANDOM_BYTES(16)) |
+----------------------------------+
| C83CF8A2499F407E15F34F6E32948CEA |
+----------------------------------+
MD5(str)
計算MD5 128位檢驗和。
mysql> select MD5('polardb-x');
+----------------------------------+
| MD5('polardb-x') |
+----------------------------------+
| fa4900656bcd39dc90024e733fa4531f |
+----------------------------------+
SHA1(str), SHA(str)
計算SHA-1 160位校驗和。該函數安全性強于MD5。
mysql> select SHA1('polardb-x');
+------------------------------------------+
| SHA1('polardb-x') |
+------------------------------------------+
| a2e83af051f032b500f13c369976298208d821d1 |
+------------------------------------------+
SHA2(str, hash_length)
計算SHA-2族雜湊演算法結果,參數hash_length決定了檢驗和結果的位數,合法取值包括:224、256、384、512和0(等價于256)。該函數安全性強于MD5和SHA1。
mysql> select SHA2('polardb-x', 384);
+--------------------------------------------------------------------------------------------------+
| SHA2('polardb-x', 384) |
+--------------------------------------------------------------------------------------------------+
| 20222037666be5234d9af3c391f9c3a1a3e39b910f3f8081c32d972acca890c818d6c70025ff6c6d4b648bd91d66a3fe |
+--------------------------------------------------------------------------------------------------+