加密函数
这些函数使用 AES(Advanced Encryption Standard,高级加密标准)算法对数据进行加密和解密。
密钥长度取决于加密模式:在 -128-、-196- 和 -256- 模式下,密钥长度分别为 16、24 和 32 字节。
初始化向量长度始终为 16 字节(超过 16 字节的部分会被忽略)。
HMAC
引入版本:v25.12.0
使用指定的哈希算法和密钥,为给定消息计算 HMAC (基于哈希的消息认证码) 。
支持的哈希算法:
- blake2b512
- blake2s256
- md4
- md5
- md5-sha1
- mdc2
- ripemd (别名:RIPEMD160、ripemd)
- ripemd160
- rmd160 (别名:RIPEMD160、rmd160)
- sha1
- sha224
- sha256
- sha3-224
- sha3-256
- sha3-384
- sha3-512
- sha384
- sha512
- sha512-224
- sha512-256
- shake128
- shake256
- sm3
- ssl3-md5 (别名:MD5、ssl3-md5)
- ssl3-sha1 (别名:SHA1、ssl3-sha1)
- whirlpool
语法
参数
mode— 哈希算法名称 (不区分大小写) 。支持:md5、sha1、sha224、sha256、sha384、sha512。Stringmessage— 用于计算 HMAC 的消息。Stringkey— 用于 HMAC 的密钥 (秘钥) 。String
返回值
返回一个包含 HMAC 摘要的二进制字符串。String
示例
HMAC-SHA256 基本用法
不同哈希算法
不区分大小写模式
aes_decrypt_mysql
引入自:v20.12.0
解密由 MySQL 的 AES_ENCRYPT 函数加密的数据。
对于相同的输入,会生成与 decrypt 相同的明文。
当 key 或 iv 长于正常长度时,aes_decrypt_mysql 的行为与 MySQL 的 aes_decrypt 一致,即对 key 进行“折叠”处理,并忽略 iv 超出的位。
支持以下解密模式:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-cfb128
- aes-128-ofb, aes-192-ofb, aes-256-ofb
语法
参数
返回值
返回解密后的字符串。String
示例
解密 MySQL 数据
aes_encrypt_mysql
引入版本:v20.12.0
以与 MySQL 的 AES_ENCRYPT 函数相同的方式加密文本。
生成的密文可以使用 MySQL 的 AES_DECRYPT 函数解密。
对相同输入,生成的密文与 encrypt 函数相同。
当 key 或 iv 的长度超过其通常要求时,aes_encrypt_mysql 会遵循 MySQL aes_encrypt 的行为,即对 key 进行“折叠”,并忽略 iv 的多余位。
支持的加密模式为:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
语法
参数
mode— 加密模式。Stringplaintext— 需要加密的文本。Stringkey— 加密密钥。如果密钥长度大于mode所需长度,将执行 MySQL 特有的密钥折叠规则。Stringiv— 可选。初始化向量。仅前 16 个字节生效。String
返回值
密文(二进制字符串)。String
示例
相同输入比较
密钥过长时加密失败
MySQL 兼容性
使用更长的 IV 会得到相同的结果
decrypt
自 v20.12.0 引入
此函数使用以下模式,对经 AES 加密的二进制字符串进行解密:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
- aes-128-gcm, aes-192-gcm, aes-256-gcm
- aes-128-ctr, aes-192-ctr, aes-256-ctr
- aes-128-cfb, aes-128-cfb1, aes-128-cfb8
语法
参数
mode— 解密模式。Stringciphertext— 需要解密的密文。Stringkey— 解密密钥。Stringiv— 初始化向量。对于-gcm模式为必需,其他模式可选。Stringaad— 附加认证数据。如果该值不正确,将无法解密。仅在-gcm模式下有效,其他模式会抛出异常。String
返回值
返回解密后的明文。String
示例
正确解密已加密的数据
错误解密加密数据
encrypt
自 v20.12.0 引入
使用 AES 按下列任一模式将明文加密为密文:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
- aes-128-gcm, aes-192-gcm, aes-256-gcm
- aes-128-ctr, aes-192-ctr, aes-256-ctr
- aes-128-cfb, aes-128-cfb1, aes-128-cfb8
语法
参数
mode— 加密模式。Stringplaintext— 需要加密的文本。Stringkey— 加密密钥。Stringiv— 初始化向量。在-gcm模式下必需,在其他模式下可选。Stringaad— 附加认证数据。它本身不会被加密,但会影响解密。仅在-gcm模式下生效,在其他模式下会抛出异常。String
返回值
返回二进制字符串形式的密文。String
示例
加密示例
GCM 模式示例
tryDecrypt
自 v22.10.0 起引入
类似于 decrypt 函数,但在因使用错误密钥而解密失败时返回 NULL。
语法
参数
mode— 解密模式。Stringciphertext— 需要解密的密文。Stringkey— 解密密钥。Stringiv— 可选。初始化向量。在-gcm模式下是必需的,在其他模式下可选。Stringaad— 可选。附加认证数据。如果该值不正确,则无法解密。仅适用于-gcm模式,在其他模式下会抛出异常。String
返回值
返回解密后的 String,如果解密失败则返回 NULL。Nullable(String)
示例
创建表并插入数据