加密函数
这些函数使用 AES(高级加密标准)算法对数据进行加密和解密。
密钥长度取决于加密模式:在 -128-、-196- 和 -256- 模式下,分别为 16、24 和 32 字节。
初始化向量的长度始终为 16 字节(超过 16 字节的部分会被忽略)。
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
返回值
返回解密后的字符串,如果解密失败则返回 NULL。Nullable(String)
示例
创建表并插入数据