CHAR vs VARCHAR用于密码安全性

时间:2016-01-15 00:42:35

标签: sql char

CHAR over VARCHAR存储密码有什么好处吗?

我追求高低,却找不到任何东西。

我问,因为我被告知要使用CHAR作为密码,并对此感到好奇。

2 个答案:

答案 0 :(得分:2)

您的密码是否有最大长度限制?如果他们这样做,您就不需要varchar

在任何情况下,如果您要存储密码,您应该对它们进行散列并存储散列。许多散列算法都是固定大小的,所以我不认为char应该是一个问题。只需分配适当数量的字符。

无论你做什么,一定要哈希吧!

答案 1 :(得分:2)

安全性没有区别。不同之处在于存储机制。

来自MySQL manual

  

下表通过显示将各种字符串值存储到CHAR(4)和VARCHAR(4)列中的结果(假设该列使用单字节字符集,如latin1)来说明CHAR和VARCHAR之间的差异。

Value       CHAR(4) Storage Required    VARCHAR(4)  Storage Required
''          ''      4 bytes             ''          1 byte
'ab'        'ab '   4 bytes             'ab'        3 bytes
'abcd'      'abcd'  4 bytes             'abcd'      5 bytes
'abcdefgh'  'abcd'  4 bytes             'abcd'      5 bytes

因此,如果您存储的字符串的长度是可变的,那么您可以看到VARCHAR是有益的。 CHAR经常用于密码字段的原因是因为无论输入的长度如何,散列算法的输出都是一致的。由于您存储的是用户密码的哈希值,而不是密码本身,因此字段长度将保持一致。

leeor建议您散列密码是正确的。 PHP The Right Way是这方面最佳做法的良好资源。