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()也不合适。最好在一个应用程序中使用最先进的加密技术,并将生成的加密数据插入数据库。
这也将解决我在上面提到的问题,即明文记录在日志中。