【问题标题】:What type of encryption is used in MySQL ENCODE?MySQL ENCODE 中使用什么类型的加密?
【发布时间】:2018-09-11 01:11:54
【问题描述】:

MySQL

ENCODE('pass','salt')

使用了什么样的密码学? 非常类似于 DES

知道密码是不是暴力破解?

【问题讨论】:

  • 什么是“知道密码时是否暴力破解?”什么意思?

标签: mysql decode encode crypt


【解决方案1】:

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 不执行加盐或阻塞链,因此它也严重不足。
  • 关于“我认为您将加密与散列混淆”,我不是。在不使用任何块链接的情况下加密 Tux 的位图会导致 this。如您所见,它非常不安全!!!为避免此问题,应使用不同的密钥对每个块进行加密。对于第一个块,这是通过加盐(使用随机初始化向量)实现的。对于后续块,这是使用block chaining 实现的。 AES_ENCRYPT 缺少这两个基本的关键功能。
  • 很好。我没有接受过加密技术方面的正式教育,我很感激你给我的信息。我将在上面编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2021-08-12
  • 1970-01-01
相关资源
最近更新 更多