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%。
内容来源于网络如有侵权请私信删除
- 还没有人评论,欢迎说说您的想法!