更新时间:2025-10-23 GMT+08:00
加解密函数
AES_DECRYPT
AES_DECRYPT(crypt_str, key_str[, init_vector][, kdf_name][, salt][, info | iterations])
描述:基于AES算法,使用解密口令key_str、初始化向量init_vector和KDF相关选项(kdf_name、salt、info/iterations)对加密后的字符串crypt_str进行解密。
参数解释:
- crypt_str:需要被解密的字符串。若crypt_str为NULL,函数返回NULL。
- key_str:解密口令。若key_str为NULL,函数返回NULL。为了安全,对于128bit/192bit/256bit的密钥长度(由块加密模式block_encryption_mode确定),建议用户使用128bit/192bit/256bit的安全随机数作为密钥字符串。
- init_vector:为需要它的块加密模式提供初始化变量,长度大于等于16字节(大于16字节的部分会被自动忽略)。str和key_str均不为NULL时,该参数不可为NULL,否则报错。为了安全,建议用户在OFB模式下,保证每次加密IV值的唯一性;在CBC模式和CFB模式下,保证每次加密的IV值不可被预测。
- kdf_name:指定使用的KDF算法,取值为PBKDF2或HKDF。
- salt:用来与原密码组合生成密钥。
- info/iterations:对于HKDF,INFO是该字段指定的info参数。对于PBKDF2,ITERATIONS是该字段指定的迭代次数。
返回值类型:统一返回LONGBLOB类型。
示例:
m_db=# SELECT AES_DECRYPT(AES_ENCRYPT('huwei123','123456vfhex4dyu','vdaladhjsadadabcdef','hkdf'),'123456vfhex4dyu','vdaladhjsadadabcdef','hkdf');
aes_decrypt
-------------
huwei123
(1 row)
- 由于该函数的执行过程需要传入解密口令,为了安全起见,gsql工具不会将包含该函数名字样的SQL记录入执行历史;即无法在gsql里通过上下翻页功能找到该函数的执行历史。
- 在存储过程的相关操作中需尽量避免调用该函数,避免敏感参数信息在日志中泄露的风险。同时建议用户在使用包含该函数的存储过程相关操作时,将该函数的参数信息过滤后再提供给外部维护人员定位,日志使用完后请及时删除。
- 在打开debug_print_plan开关的情况下需尽量避免调用该函数,避免敏感参数信息在日志中泄露的风险。同时建议用户在打开debug_print_plan开关生成的日志中对该函数的参数信息进行过滤后再提供给外部维护人员定位,日志使用完后请及时删除。
- 若想成功解密,需要保证block_encryption_mode,key_str,iv值与加密时一致。
- 由于编码差异,不支持从gsql客户端直接复制加密后的数据进行解密,此场景解密出的结果不一定是加密前的字符串。
- 由于SQL_ASCII设置与其他设置表现得相当不同。如果服务器字符集是SQL_ASCII,服务器把字节值0~127根据 ASCII标准解释,而字节值128~255则当作无法解析的字符。如果设置为SQL_ASCII,就不会有编码转换。该函数调用openssl三方库返回的数据的编码为非ASCII数据,因此当数据库服务端字符集设置为SQL_ASCII时,客户端编码也需设置为SQL_ASCII ,否则会报错。因为数据库不会帮助转换或者校验非ASCII字符。
AES_ENCRYPT
AES_ENCRYPT(str, key_str[, init_vector][, kdf_name][, salt][, info | iterations])
描述:基于AES算法,使用加密口令key_str、初始化向量init_vector和KDF相关选项(kdf_name、salt、info/iterations)对字符串str进行加密。
参数解释:
- str:需要被加密的字符串。若str为NULL,函数返回NULL。
- key_str:加密口令。若key_str为NULL,函数返回NULL。为了安全,对于128bit/192bit/256bit的密钥长度(由块加密模式block_encryption_mode确定),建议用户使用128bit/192bit/256bit的安全随机数作为密钥字符串。
- init_vector:为需要它的块加密模式提供初始化变量,长度大于等于16字节(大于16字节的部分会被自动忽略)。str和key_str均不为NULL时,该参数不可为NULL,否则报错。为了安全,建议用户在OFB模式下,保证每次加密IV值的唯一性;在CBC模式和CFB模式下,保证每次加密的IV值不可被预测。
- kdf_name:指定使用的KDF算法,取值为PBKDF2或HKDF。
- salt:用来与原密码组合生成密钥。
- info/iterations:对于HKDF,INFO是该字段指定的info参数。对于PBKDF2,ITERATIONS是该字段指定的迭代次数。
返回值类型:统一返回LONGBLOB类型。
示例:
m_db=# SELECT AES_ENCRYPT('huwei123','123456vfhex4dyu,vdaladhjsadad','1234567890123456');
aes_encrypt
-------------------
Z_Z\x7F\\x7Fy\x1D
(1 row)
- 由于该函数的执行过程需要传入加密口令,为了安全起见,gsql工具不会将包含该函数名字样的SQL记录入执行历史;即无法在gsql里通过上下翻页功能找到该函数的执行历史。
- 在存储过程的相关操作中需尽量避免调用该函数,避免敏感参数信息在日志中泄露的风险。同时建议用户在使用包含该函数的存储过程相关操作时,将该函数的参数信息过滤后再提供给外部维护人员定位,日志使用完后请及时删除。
- 在打开debug_print_plan开关的情况下需尽量避免调用该函数,避免敏感参数信息在日志中泄露的风险。同时建议用户在打开debug_print_plan开关生成的日志中对该函数的参数信息进行过滤后再提供给外部维护人员定位,日志使用完后请及时删除。
- 由于SQL_ASCII设置与其他设置表现得相当不同。如果服务器字符集是SQL_ASCII,服务器把字节值0~127根据 ASCII标准解释,而字节值128~255则当作无法解析的字符。如果设置为SQL_ASCII,就不会有编码转换。该函数调用openssl三方库返回的数据的编码为非ASCII数据,因此当数据库服务端字符集设置为SQL_ASCII时,客户端编码也需设置为SQL_ASCII ,否则会报错。因为数据库不会帮助转换或者校验非ASCII字符。
PASSWORD
PASSWORD(TEXT str_input)
描述:对输入的字符串进行两次SHA-1加密输出。
返回值类型:TEXT
示例:
m_db=# SELECT PASSWORD('Gauss');
password
-------------------------------------------
*DAC4E366F59D0427EFB4CCE84C7EA705EEA2FCC6
(1 row)
PASSWORD函数使用的SHA-1加密算法安全性低,存在安全风险,不建议使用。
父主题: 函数和操作符