MySQL 8.0 加密解密函数

MySQL的加密和解密函数个人分为两类:
1.只支持正向加密不支持反向解密的函数:
MD5()、SHA1()|SHA()、SHA2()
针对此类加密的算法MySQL不提供解密,但是我们可以通过网站
http://www.cmd5.com/ 反向解密。
改网站支持MD5、SHA、SHA256、SHA512等解密。

2.支持加密和解密的函数:
COMPRESS(),UNCOMPRESS():普通的加密和解密算法。
ENCODE(),DECODE():普通的加密和解密算法
DES_ENCRYPT(),DES_DECRYPT():支持DES算法的加密和解密。
AES_DECRYPT(),AES_ENCRYPT():支持AES算法的加密和解密。
ASYMMETRIC_ENCRYPT(),ASYMMETRIC_DECRYPT():签名加密和解密。
STATEMENT_DIGEST(),STATEMENT_DIGEST_TEXT():针对语句进行hash算法和反向解析。


3.第三类:
3.1
ASYMMETRIC_DERIVE()
ASYMMETRIC_SIGN()
ASYMMETRIC_VERIFY()
CREATE_ASYMMETRIC_PRIV_KEY() 创建私钥
CREATE_ASYMMETRIC_PUB_KEY()  创建公钥


3.2
CREATE_DH_PARAMETERS() 生成DH秘钥
CREATE_DIGEST()        字符串digest
PASSWORD()           返回加密的密码,此函数在MySQL8.0被移除。
RANDOM_BYTES()       生成随机向量值。
UNCOMPRESSED_LENGTH()  返回加密前的字符串长度。
VALIDATE_PASSWORD_STRENGTH() 密码强度的验证值。

上述加密算法中的 MD5(), SHA(), SHA1(), SHA2(),STATEMENT_DIGEST(), STATEMENT_DIGEST_TEXT().
返回的是ASCII字符,字符由参数character_set_connection和collation_connection决定。当设置为binary时则不受影响。
mysql> show variables like '%connection';
+---------------------------+--------------------+
| Variable_name             | Value              |
+---------------------------+--------------------+
| character_set_connection  | utf8mb4            |
| collation_connection      | utf8mb4_unicode_ci |
| default_master_connection |                    |
+---------------------------+--------------------+
3 rows in set (0.001 sec)

示例:
1.MD5加密
mysql> select md5('123456') MD5;
+----------------------------------+
| MD5                              |
+----------------------------------+
| e10adc3949ba59abbe56e057f20f883e |
+----------------------------------+
1 row in set (0.00 sec)
MD5返回的字符串是32bit的,若要存储的话可以使用char(32).
若要将这类信息转换为16进制的复杂格式,可以使用UNHEX()函数和binary(16)存储。
mysql> create table wuhan.t_md5 as select unhex(md5('123456')) hex_md5;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from wuhan.t_md5;
+------------------+
| hex_md5          |
+------------------+
| 9IV       |
+------------------+
1 row in set (0.00 sec)

mysql> desc wuhan.t_md5;
+---------+---------------+------+-----+---------+-------+
| Field   | Type          | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| hex_md5 | varbinary(64) | YES  |     | NULL    |       |
+---------+---------------+------+-----+---------+-------+
1 row in set (0.00 sec)


2.SHA 加密:SHA等同于SHA1,SHA加密算法比MD5更加安全。
mysql> select sha('123456');
+------------------------------------------+
| sha('123456')                            |
+------------------------------------------+
| 7c4a8d09ca3762af61e59520943dc26494f8941b |
+------------------------------------------+

3.SHA2加密:
SHA2(str, hash_length)
hash_length支持的值224, 256, 384, 512, or 0。0等同于256.
mysql> select sha2('123456',0) A,sha2('123456',256) B\G   
*************************** 1. row ***************************
A: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
B: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
1 row in set (0.01 sec)

预计国内很多中小创业公司,和一些IT公司可能使用的加密算法就是上面的几种。
本人在网上收集到的一些密码,可以看到大部分的国人使用的密码都很简单,很容易猜测和密码碰撞到的。
Password_encrypt                  peoples  plain_text  
--------------------------------  -------  ------------
e10adc3949ba59abbe56e057f20f883e     1735  123456      
c33367701511b4f6020ec61ded352059       67  654321      
21218cca77804d2ba1922c33e0151105       54  888888      
670b14728ad9902aecba32e22fa4f6bd       49  000000      
96e79218965eb72c92a549dd5a330112       30  111111      
f379eaf3c831b04de153469d1bec345e       22  666666      
25d55ad283aa400af464c76d713c07ad       20  12345678    
25f9e794323b453885f5181f1b624d0b       19  123456789   
e35cf7b66449df565f93c607d5a81d09       16  456789      
fcea920f7412b5da7be0cf42b8c93759       14  1234567 
排名前十的密码,占比密码取样的25%。



 

你可能感兴趣的:(MySQL)