MySQL AES_ENCRYPT()、AES_DECRYPT()函数

AES_ENCRYPT()AES_DECRYPT()使用官方AES算法实现数据的加密和解密;其密钥默认长度为128位,默认块加密模式为ECB;

AES_ENCRYPT(str,key_str[,init_vector])

该函数使用密钥key_strstr进行加密,返回已加密的数据;key_str长度达不到密钥长度时会自动填充,超过则忽略;如何定义密钥长度请参阅后文;

AES_DECRYPT(crypt_str,key_str[,init_vector])

该函数使用密钥key_str对已加密数据crypt_str进行解密,并返回原始明文;key_str长度达不到密钥长度时会自动填充,超过则忽略;如何定义密钥长度请参阅后文;

加密解密例子:

SET @key_str = 'my secret key';
set @crypt_str = AES_ENCRYPT('明文',@key_str);
SELECT AES_DECRYPT(@crypt_str,@key_str);
+--------------------------------------------------------------------+
| AES_DECRYPT(@crypt_str,@key_str)                                   |
+--------------------------------------------------------------------+
| 0xE6988EE69687                                                     |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)

如果AES_ENCRYPT()在mysql客户端中调用,则返回的二进制字符串可能使用十六进制表示法显示,它取决于--binary-as-hex

init_vector初始化向量

AES_ENCRYPT()AES_DECRYPT()函数允许使用可选参数init_vector为基于块加密模式的算法提供初始化向量;

块加密模式可通过系统变量block_encryption_mode指定,默认值为aes-128-ecb,它表示使用128位长度的密钥和ECB模式进行加密;而ECB模式不需要提供初始化向量,所以上文的示例没有使用init_vector参数;

以下表格列出了支持的块加密模式,以及是否需要初始化向量;

块加密模式 是否需要初始化向量
ECB 不需要
CBC 需要
CFB1 需要
CFB8 需要
CFB128 需要
OFB 需要

init_vector参数长度必须为16字节,超过16字节将忽略;

对于不需要初始化向量的块加密模式,如果指定了初始化向量,则会生成警告;

通常我们可以调用RANDOM_BYTES(16)生成随机向量;加密和解密必须使用相同的向量;

这个例子将修改块加密模式位CBC,使用RANDOM_BYTES(16)生成向量,进行加密和解密;

SET block_encryption_mode = 'aes-128-cbc';
SET @key_str = 'my secret key';
SET @init_vector = RANDOM_BYTES(16);
SET @crypt_str = AES_ENCRYPT('message',@key_str,@init_vector);
SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/mysql-function-aes-encrypt-decrypt.html

分类: 计算机技术
推荐阅读:
python bin()函数详细教程 bin()函数将一个整数转换成前缀为”0b“的二进制字符串形式,如果参数不是int对象,那它需要定义__index__()方法并返回一个整数;
Rust 宏编程 Rust 的宏编程是一种强大的元编程技术,允许您在编译时生成代码,创建自定义语法,以及进行各种代码转换。在 Rust 中,标准宏是内置于 Rust 标准库中的宏。这些宏是 Rust 语言提供的一部分,可直接在任何 Rust 代码中使用,无需额外的导入或引入其他依赖。
Linux下查看端口是哪个程序在使用 在Linux系统下,如果你想知道某个端口是哪些程序在使用,你可以使用这一条命令来查看:
在Windows系统下启动和终止MySQL服务 Windows平台下要启动MySQL服务只需以管理员权限运行命令net start mysql80,要关闭服务运行net stop mysql80;
Python breakpoint()函数 breakpoint()是 Python 3.7 中新增的一个调试工具,它是一个内置函数,可以在程序执行过程中插入一个断点,让程序停在该处等待调试器的进一步命令。
Python实现双向链表 在本文中,我们将看到另一种类型的链表,可以向前和向后移动;这样的链接列表称为双重链接列表(双向链表)。