MySQL函数加密函数

说白了,MySQL的加密函数有很多,但最常用的就是AES和DES。
我们先来说说最重要的,AES_ENCRYPT 和 AES_DECRYPT。
这两个特性都是AES加密标准,在速度和安全性上有一个平衡。
比如我们去年跑的项目,用1 2 8 位密钥加密了大约3 000位数据,效果非常好。
许多人没有注意到的另一点是,AES 加密有两种密钥长度:1 2 8 位和 2 5 6 位。
2 5 6 位更安全,但速度较慢。
我一开始以为1 2 8 位就够了,后来发现2 5 6 位在某些场景下更可靠。

还有另一个重要的细节。
DES_DECRYPT 和 DES_ENCRYPT 是 Triple-DES 算法。
这个算法比较老了,但是安全性还是不错的。
但DES加密速度较慢,目前很少使用。
等等,还有一件事。
MD5 功能虽然速度快,但是不太安全,现在已经很少使用了。
还有 OLD_PASSWORD 和 PASSWORD 函数。
前者与旧版本兼容,后者是保存密码的标准功能。

最后提醒一下,加密时要注意密钥管理。
如果密钥泄露,数据将不安全。
我认为值得一试。
在实际项目中,您可以根据自己的需求选择合适的加密函数。
毕竟,安全无小事。

MySQL如何通过加密函数保障数据安全 MySQL加密与解密函数的实现原理

那天我在一家咖啡厅,看到旁边的女孩在调试加密代码时皱着眉头看着电脑屏幕。
忽然他叹了口气,说道:“为什么这个IV总是错呢?”我随口问道:“不是随机生成的吗?”他愣了一下,道:“是啊,不过好像很眼熟……”。
等等,这让我想起了我之前做过的一个项目。
加密的数据实际上在某个时候被破解了。
原因是IV生成算法随机性不够。
我当时实在是太着急了,最后只好把所有的数据都重新锁了。
所以这件事真的不能简单地理解为一个算法问题。

MySQL中MD5加密的使用方法mysql中md5写法

哈,MD5 就是这个东西。
当我第一次开始使用 MySQL 时,我很喜欢使用它。
我认为这非常好。
但现在想来,确实是一团糟。

上周,一位客户问我为什么他将密码保存在数据库中。
我只是用 SELECT MD5 ('1 2 3 4 5 6 ') 来检查它......我当时很困惑。
这个MD5 返回的是一个公共算法。
这是存储在数据库中的结果。
查不出来吗?
MD5 函数使用起来非常简单。
正如您所说,只有 MD5 (“要加密的字符串”)返回 3 2 位十六进制字符串。
例如,SELECT MD5 ('hello');,结果为 5 d4 1 4 02 abc4 b2 a7 6 b9 7 1 9 d9 1 1 01 7 c5 9 2 任何人都可以做到这一点。

但是想一想,这东西是单向加密的。
理论上,如果输入相同的字符串,输出将始终相同。
但问题是MD5 特别容易受到碰撞攻击,即不同的输入可以产生相同的MD5 值。
而现在有了暴力破解和彩虹破解表,常见的MD5 密码几分钟就可以破解。

那么现在谁还在使用纯 MD5 来存储密码呢?基本上都被淘汰了。
现在流行的是salt hashing,比如bcrypt或者Argon2 比如我在2 02 3 年负责的一个项目中,我们使用了bcrypt。
每当用户登录或更改密码时,都会将随机生成的盐添加到密码中,然后一起进行哈希处理。
最终存入数据库的是salt+hash值。
检查密码时,先从数据库中去掉salt,然后将salt添加到用户输入的密码中,进行哈希处理,并与数据清单中的哈希值进行比较。
应该是一样的。

如果确实必须使用MD5 ,不要直接将明文密码存储在MD5 中。
保存前至少偶尔加一点盐。
但说实话,我自己从来没有实践过这个。
我刚刚读了大佬的代码。
如果你真的想使用它,建议你首先找到一个可靠的库来实现哈希和加盐,而不是自己编写。

无论如何,这取决于你。
MD5 现在确实不推荐了。