我一直对我的数据库的创建感到困惑。使用 md5 salt 加密的密码的正确数据类型是什么?
我一直在使用 VarChar;但我被告知要搬过去char
但从未给出解释?
另外,我知道这不是最佳实践,但我的数据库是 Varchar(255) 来保存我的密码;拥有它的最佳长度是多少?因为我不确定 md5 是否总是返回相同长度的字符串,或者它可能会有所不同?
你是第一个问题:
VARCHAR
- 保留尾随空格。(仅限 MySQL 5.0.3+。)
- 最小的存储开销。17 个字符的记录只占用 17 个字符的空间。
- 搜索此列时选择较慢。
字符
- 尾随空格总是被删除。
- 每条记录占用固定数量的空间 - 在您的情况下为 19 个字符。您的 17 个字符记录将浪费两个字节的存储空间。
- 搜索此列时选择更快。
MD5 将始终返回 32 个字符,因此在存储时使用 CHAR(32) 会更有效,即使它使用盐,它仍然会散列到那么多字符。您总是希望选择最合适的字符大小。
如果您要更改密码加盐-不要同时将加密更改为安全的东西-例如 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。