侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 297 篇文章
  • 累计创建 134 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

MySql加密函数的使用方式

孔子说JAVA
2022-09-16 / 0 评论 / 0 点赞 / 36 阅读 / 4,155 字 / 正在检测是否收录...

MySQL数据库中提供了很丰富的函数,这些函数可以帮助用户更加方便的处理表中的数据,他们会对传递进来的参数进行处理,并返回一个处理结果,也就是返回一个值。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。SELECT语句及其条件表达式都可以使用这些函数。同时,INSERT 、UPDATE、DELECT语句及其条件表达式也可以使用这些函数。本文主要讲解加密函数。加密函数是MySQL用来对数据进行加密的函数,函数列表如下:

函数名称 作 用
PASSWORD 对字符串str进行加密,不可逆
MD5 密码散列函数,计算字符串str的MD5校验和
SHA FIFS 认证的安全散列算法,比 MD5 更安全
ENCODE(str,key) 使用 key 作为加密秘钥对 str 进行加密,加密结果是二进制数
DECODE(crypt_str,key) 对经过 ENCODE 加密之后的密文crypt_str进行解密
AES_ENCRYPT(str,key) 用密钥key对字符串str利用高级加密标准算法加密
AES_DECRYPT(str,key) 利用高级加密标准算法用密钥key对AES_ENCRYPT加密后的字符串str解密

1、PASSWORD(str)加密

该函数可以对字符串str进行加密,并返回加密之后的字符串,一般情况下,PASSWORD(str)用于给用户的密码加密,该加密函数不可逆,和UNIX密码加密过程使用不同的算法。

mysql> SELECT PASSWORD(123);
+----------------------------------+
| PASSWORD(123)                         |
+----------------------------------+
| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+----------------------------------+
1 row in set (0.00 sec)

2、MD5(str)加密

MD5 是一种被广泛使用的加密方法,它是一个密码散列函数,该函数对原明文str计算出一个 MDS128 比特校验和,该值以 32 位十六进制数字的二进制字符串形式返回,该加密函数可逆(计算字符串str的MD5校验和)。

  • 当你的保护对象发生变化后,其 MD5 的值也会不一样,所以 MD5 经常用来验证数据有没有被篡改。
mysql> select MD5(123);
+----------------------------------+
| MD5(123)                         |
+----------------------------------+
| 202cb962ac59075b964b07152d234b70 |
+----------------------------------+
1 row in set (0.00 sec)

3、SHA(str)加密

SHA 和 MD5 一样,也是一个密码散列函数,是 FIFS 认证的安全散列算法,比 MD5 更安全(计算字符串str的安全散列算法SHA校验和)。

mysql> select sha(123);
+------------------------------------------+
| sha(123)                                 |
+------------------------------------------+
| 40bd001563085fc35165329ea1ff5c5ecbdbbeef |
+------------------------------------------+
1 row in set (0.00 sec)

4、ENCODE(str,key)加密

该加密函数使用 key 作为加密秘钥对 str 进行加密,加密结果是二进制数,需要使用BLOB类型的字段保存。该函数与DECODE()函数是一对,需要同样的秘钥才能够解密。

mysql> SELECT ENCODE('123', 'xxoo');
+------------------------------------------+
| ENCODE('123', 'xxoo')                    |
+------------------------------------------+
| ;vx                                      |
+------------------------------------------+
1 row in set (0.00 sec)

5、DECODE(crypt_str,key)解密

DECODE解密函数使用 key 作为密钥,对经过 ENCODE 加密之后的密文crypt_str进行解密。

mysql> SELECT DECODE(';vx','xxoo');
+------------------------------------------+
| DECODE(';vx', 'xxoo')                    |
+------------------------------------------+
| 123                                      |
+------------------------------------------+
1 row in set (0.00 sec)

加密和解密函数放在一起验证:

mysql> SELECT DECODE(ENCODE('123', 'xxoo'),'xxoo');
+------------------------------------------+
| DECODE(ENCODE('123', 'xxoo'),'xxoo')     |
+------------------------------------------+
| 123                                      |
+------------------------------------------+
1 row in set (0.00 sec)

6、AES_ENCRYPT(str,key)加密

返回用密钥key对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT的结果是一个二进制字符串,以BLOB类型存储。AES_ENCRYPT函数接受两个参数,它们是加密的字符串和用于加密该字符串的 key 字符串。如果参数为NULL,则返回NULL。

mysql> SELECT AES_ENCRYPT('root','salt');
+------------------------------------------+
| AES_ENCRYPT('root','salt')               |
+------------------------------------------+
| �&�r[Lu��S��6�                     |
+------------------------------------------+
1 row in set (0.00 sec)

可以在存入数据库的时候,转成十六进制。

create table t2(c1 varchar(64);
insert into t2 select hex(aes_encrypt(('root'),'salt'));

mysql> select * from t2;
+----------------------------------+
| c1 |
+----------------------------------+
| E02693725B4C1A75A3935383D936E120 |
+----------------------------------+
1 row in set (0.00 sec)

AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128 比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB

7、AES_DECRYPT(str,key)解密

返回用密钥key对字符串str利用高级加密标准算法解密后的结果。

mysql> SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
+------------------------------------------+
| AES_DECRYPT(AES_ENCRYPT('root','key'),'key')   |
+------------------------------------------+
| root                                     |
+------------------------------------------+
1 row in set (0.00 sec)

如果在加密后用hex转为了十六进制,解密之前要先用huhex函数转一次。

mysql> select aes_decrypt(unhex(c1),'salt') from t2;
+-------------------------------+
| aes_decrypt(unhex(c1),'salt') |
+-------------------------------+
| root                          |
+-------------------------------+
1 row in set (0.00 sec)
0

评论区