【发布时间】:2018-09-11 01:11:54
【问题描述】:
MySQL
ENCODE('pass','salt')
使用了什么样的密码学? 非常类似于 DES
知道密码是不是暴力破解?
【问题讨论】:
-
什么是“知道密码时是否暴力破解?”什么意思?
MySQL
ENCODE('pass','salt')
使用了什么样的密码学? 非常类似于 DES
知道密码是不是暴力破解?
【问题讨论】:
ENCODE() 和 DECODE() 使用的算法的源代码可在此处获得:
https://github.com/mysql/mysql-server/blob/5.7/sql/sql_crypt.cc
该文件中的评论说该算法“对于短字符串应该没问题”,但这并不能让我相信它是一种专业强度的加密算法。
请注意,这两个函数在 MySQL 5.7 中已被弃用。你应该改用AES_ENCRYPT() & AES_DECRYPT()。
但是,还有一个建议是完全避免在 SQL 中使用加密函数,因为如果这样做,明文字符串将被添加到您的查询日志或二进制日志中:
INSERT INTO SuperSecureTable
SET secret = AES_ENCRYPT('no one should see this', 'secret');
@ikegami 的回复:
我认为您将加密与散列混淆了。
更正:我同意你的观点。根据加密要求的安全程度,AES_ENCRYPT() 也不合适。最好在自己的应用程序中使用最先进的加密技术,并将生成的加密数据插入数据库。
这也可以解决我上面提到的明文记录在日志中的问题。
【讨论】:
AES_ENCRYPT 不执行加盐或阻塞链,因此它也严重不足。
AES_ENCRYPT 缺少这两个基本的关键功能。