MySQL表中的64位密码哈希值

时间:2011-10-24 11:12:37

标签: php mysql hash database-schema

我使用此功能来散列我的密码:

// RETURNS: rAyZOnlNBxO2WA53z2rAtFlhdS+M7kec9hskSCpeL6j+WwcuUvfFbpFJUtHvv7ji   
base64_encode(hash_hmac('sha384', $str . SC_NONCE, SC_SITEKEY, true));

我在 char(64)字段(MySQL -InnoDB)中存储哈希值。

我应该使用 varchar(64)而不是 char(64)吗?为什么呢?

修改 我用 sha384 更改了 sha256 。因为在这个例子中,sha256总是为我返回44个字节。抱歉令人困惑。现在它是64字节。

4 个答案:

答案 0 :(得分:5)

varchars仅使用最多所需的长度来节省存储空间。如果64位散列总是64位,那么它在存储方面没有区别,所以在这种情况下char可能和varchar一样好。

如果要存储可变长度数据,那么varchar将节省浪费不必要的空间。

答案 1 :(得分:5)

您应该使用CHAR(64),因为哈希的长度是固定的。使用VARCHAR将添加另一个字节,浪费空间。

答案 2 :(得分:3)

你可以做的另一种方法(如果你真的非常关心空间)是以二进制形式存储哈希。可以找到有关如何执行此操作的一些详细信息here;你可能想要BINARY(32)用于SHA-256哈希。

答案 3 :(得分:2)

即使您使用Base 64编码的字符串,结果的长度也不一定是64位。在这种情况下,VARCHAR更好,因为结果可能短于64位。

事实上,如here所示,64位是最大长度而不是设定长度。