天天看點

開發指南—函數—加密和壓縮函數

支援的加密和壓縮函數

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 |
+--------------------------------------------------------------------------------------------------+      

繼續閱讀