2

我一直对我的数据库的创建感到困惑。使用 md5 salt 加密的密码的正确数据类型是什么?

我一直在使用 VarChar;但我被告知要搬过去char但从未给出解释?

另外,我知道这不是最佳实践,但我的数据库是 Varchar(255) 来保存我的密码;拥有它的最佳长度是多少?因为我不确定 md5 是否总是返回相同长度的字符串,或者它可能会有所不同?

4

3 回答 3

2

你是第一个问题:

VARCHAR

  • 保留尾随空格。(仅限 MySQL 5.0.3+。)
  • 最小的存储开销。17 个字符的记录只占用 17 个字符的空间。
  • 搜索此列时选择较慢。

字符

  • 尾随空格总是被删除。
  • 每条记录占用固定数量的空间 - 在您的情况下为 19 个字符。您的 17 个字符记录将浪费两个字节的存储空间。
  • 搜索此列时选择更快。

资源

于 2012-12-14T03:05:07.977 回答
1

MD5 将始终返回 32 个字符,因此在存储时使用 CHAR(32) 会更有效,即使它使用盐,它仍然会散列到那么多字符。您总是希望选择最合适的字符大小。

于 2012-12-14T03:00:45.623 回答
1

如果您要更改密码加盐-不要同时将加密更改为安全的东西-例如 bcyrpt。

当 md5 受到损害时,尝试和“微调”md5 设置似乎是一种浪费

关于问题的其他部分;

> A CHAR(x) column can only have exactly x characters. 
> A VARCHAR(x)column can have up to x characters.

因此,如果您的盐是“固定的”(即始终为 6 个字符),那么您需要“CHAR”以获得更好的性能。但如果您的盐是可变的(即 5-6 个字符),那么您必须使用 VARCHAR。

于 2012-12-14T03:00:46.050 回答