- 一些加密函数返回 ASCII 字符串:MD5()、SHA()、SHA1()、SHA2()、STATEMENT_DIGEST()、STATEMENT_DIGEST_TEXT()。它们的返回值是一个字符串,该字符串具有由 character_set_connection 和 collation_connection 系统变量确定的字符集和排序规则。这是一个非二进制字符串,除非字符集是二进制的。
- 如果应用程序存储来自返回十六进制数字字符串的函数(例如 MD5() 或 SHA1())的值,则可以通过使用 UNHEX() 将十六进制表示形式转换为二进制并将结果存储在BINARY(N) 列。每对十六进制数字需要一个二进制形式的字节,因此 N 的值取决于十六进制字符串的长度。对于 MD5() 值,N 为 16,对于 SHA1() 值,N 为 20。对于 SHA2(),N 的范围从 28 到 32,具体取决于指定结果所需位长的参数。
- 将十六进制字符串存储在 CHAR 列中的大小损失至少是两倍,如果该值存储在使用 utf8 字符集(其中每个字符使用 4 个字节)的列中,则高达八倍。由于值较大并且需要考虑字符集排序规则,存储字符串还会导致比较慢。
函数 |
说明 |
AES_DECRYPT() |
使用 AES 解密 |
AES_ENCRYPT() |
使用 AES 加密 |
COMPRESS() |
以二进制字符串形式返回结果 |
MD5() |
计算 MD5 校验和 |
RANDOM_BYTES() |
返回随机字节向量 |
SHA1() SHA() |
计算 SHA-1 160 位校验和 |
SHA2() |
计算 SHA-2 校验和 |
STATEMENT_DIGEST() |
计算语句摘要哈希值 |
STATEMENT_DIGEST_TEXT() |
计算规范化语句摘要 |
UNCOMPRESS() |
解压缩压缩的字符串 |
UNCOMPRESSED_LENGTH() |
在压缩之前返回字符串的长度 |
VALIDATE_PASSWORD_STRENGTH() |
确定密码强度 |
注
- 许多加密和压缩函数返回结果可能包含任意字节值的字符串。如果要存储这些结果,请使用具有 VARBINARY 或 BLOB 二进制字符串数据类型的列。这避免了尾随空格删除或字符集转换可能会更改数据值的潜在问题,例如,如果您使用非二进制字符串数据类型(CHAR、VARCHAR、TEXT)可能会出现这些问题。
来自 <https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html>