本文主要介紹PolarDB-X支援的加密和壓縮函數。
支援的加密和壓縮函數
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函數。
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 |
+--------------------------------------------------------------------------------------------------+