加密函数
这些函数使用 AES(Advanced Encryption Standard,高级加密标准)算法对数据进行加密和解密。
密钥长度取决于加密模式:在 -128-、-196- 和 -256- 模式下,密钥长度分别为 16、24 和 32 字节。
初始化向量长度始终为 16 字节(超过 16 字节的部分会被忽略)。
HMAC
引入于:v25.12
使用指定的哈希算法和密钥,为给定消息计算 HMAC(基于哈希的消息认证码)。
支持的哈希算法:
- RSA-MD4(别名:MD4,RSA-MD4)
- RSA-MD5(别名:MD5,RSA-MD5)
- RSA-MDC2(别名:MDC2,RSA-MDC2)
- RSA-RIPEMD160(别名:RIPEMD160,RSA-RIPEMD160)
- RSA-SHA1(别名:RSA-SHA1,SHA1)
- RSA-SHA1-2(别名:RSA-SHA1,RSA-SHA1-2)
- RSA-SHA224(别名:RSA-SHA224,SHA224)
- RSA-SHA256(别名:RSA-SHA256,SHA256)
- RSA-SHA3-224(别名:RSA-SHA3-224,SHA3-224)
- RSA-SHA3-256(别名:RSA-SHA3-256,SHA3-256)
- RSA-SHA3-384(别名:RSA-SHA3-384,SHA3-384)
- RSA-SHA3-512(别名:RSA-SHA3-512,SHA3-512)
- RSA-SHA384(别名:RSA-SHA384,SHA384)
- RSA-SHA512(别名:RSA-SHA512,SHA512)
- RSA-SHA512/224(别名:RSA-SHA512/224,SHA512-224)
- RSA-SHA512/256(别名:RSA-SHA512/256,SHA512-256)
- RSA-SM3(别名:RSA-SM3,SM3)
- blake2b512
- blake2s256
- id-rsassa-pkcs1-v1_5-with-sha3-224(别名:SHA3-224,id-rsassa-pkcs1-v1_5-with-sha3-224)
- id-rsassa-pkcs1-v1_5-with-sha3-256(别名:SHA3-256,id-rsassa-pkcs1-v1_5-with-sha3-256)
- id-rsassa-pkcs1-v1_5-with-sha3-384(别名:SHA3-384,id-rsassa-pkcs1-v1_5-with-sha3-384)
- id-rsassa-pkcs1-v1_5-with-sha3-512(别名:SHA3-512,id-rsassa-pkcs1-v1_5-with-sha3-512)
- md4
- md4WithRSAEncryption(别名:MD4,md4WithRSAEncryption)
- md5
- md5-sha1
- md5WithRSAEncryption(别名:MD5,md5WithRSAEncryption)
- mdc2
- mdc2WithRSA(别名:MDC2,mdc2WithRSA)
- ripemd(别名:RIPEMD160,ripemd)
- ripemd160
- ripemd160WithRSA(别名:RIPEMD160,ripemd160WithRSA)
- rmd160(别名:RIPEMD160,rmd160)
- sha1
- sha1WithRSAEncryption(别名:SHA1,sha1WithRSAEncryption)
- sha224
- sha224WithRSAEncryption(别名:SHA224,sha224WithRSAEncryption)
- sha256
- sha256WithRSAEncryption(别名:SHA256,sha256WithRSAEncryption)
- sha3-224
- sha3-256
- sha3-384
- sha3-512
- sha384
- sha384WithRSAEncryption(别名:SHA384,sha384WithRSAEncryption)
- sha512
- sha512-224
- sha512-224WithRSAEncryption(别名:SHA512-224,sha512-224WithRSAEncryption)
- sha512-256
- sha512-256WithRSAEncryption(别名:SHA512-256,sha512-256WithRSAEncryption)
- sha512WithRSAEncryption(别名:SHA512,sha512WithRSAEncryption)
- shake128
- shake256
- sm3
- sm3WithRSAEncryption(别名:SM3,sm3WithRSAEncryption)
- 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
解密由 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
以与 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 引入
此函数使用以下模式,对经 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 引入
使用 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 起引入
类似于 decrypt 函数,但在因使用错误密钥而解密失败时返回 NULL。
语法
参数
mode— 解密模式。Stringciphertext— 需要解密的密文。Stringkey— 解密密钥。Stringiv— 可选。初始化向量。在-gcm模式下是必需的,在其他模式下可选。Stringaad— 可选。附加认证数据。如果该值不正确,则无法解密。仅适用于-gcm模式,在其他模式下会抛出异常。String
返回值
返回解密后的 String,如果解密失败则返回 NULL。Nullable(String)
示例
创建表并插入数据