MySQL ENCODE 使用什么类型的加密?
What type of encryption is used in MySQL ENCODE?
MySQL
ENCODE('pass','salt')
使用了什么样的密码学?
与 DES 非常相似
知道密码的情况下是暴力破解吗?
ENCODE() 和 DECODE() 使用的算法来源可在此处获得:
https://github.com/mysql/mysql-server/blob/5.7/sql/sql_crypt.cc
该文件中的评论说此算法 "should be ok for short strings" 但这并不能使我相信它是 professional-strength 加密算法。
请注意,这两个函数已在 MySQL 5.7 中弃用。您应该改用 AES_ENCRYPT()
& AES_DECRYPT()
。
但是,也有建议完全避免在 SQL 中使用加密函数,因为如果这样做,明文字符串将被添加到您的查询日志或二进制日志中:
INSERT INTO SuperSecureTable
SET secret = AES_ENCRYPT('no one should see this', 'secret');
来自@ikegami 的回复:
我认为您将加密与散列混淆了。
更正:我同意你的观点。根据加密要求的安全程度,AES_ENCRYPT() 也不合适。最好在自己的应用程序中使用最先进的加密技术,并将生成的加密数据插入数据库。
这也可以解决我上面提到的明文记录在日志中的问题。
MySQL
ENCODE('pass','salt')
使用了什么样的密码学? 与 DES 非常相似
知道密码的情况下是暴力破解吗?
ENCODE() 和 DECODE() 使用的算法来源可在此处获得:
https://github.com/mysql/mysql-server/blob/5.7/sql/sql_crypt.cc
该文件中的评论说此算法 "should be ok for short strings" 但这并不能使我相信它是 professional-strength 加密算法。
请注意,这两个函数已在 MySQL 5.7 中弃用。您应该改用 AES_ENCRYPT()
& AES_DECRYPT()
。
但是,也有建议完全避免在 SQL 中使用加密函数,因为如果这样做,明文字符串将被添加到您的查询日志或二进制日志中:
INSERT INTO SuperSecureTable
SET secret = AES_ENCRYPT('no one should see this', 'secret');
来自@ikegami 的回复:
我认为您将加密与散列混淆了。
更正:我同意你的观点。根据加密要求的安全程度,AES_ENCRYPT() 也不合适。最好在自己的应用程序中使用最先进的加密技术,并将生成的加密数据插入数据库。
这也可以解决我上面提到的明文记录在日志中的问题。