MySQL表中的64位密码哈希值


64-bit Password Hashes in MySQL tables

我使用这个函数来散列我的密码:

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

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

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

我将sha256改为sha384。因为在这个例子中,sha256总是为我返回44字节。抱歉让你糊涂了。现在是64字节

varchars通过只使用所需的长度来节省存储空间。如果64位哈希值总是64,那么在存储方面没有什么区别,所以在这种情况下,char可能和varchar一样好。

如果要存储可变长度的数据,则使用varchar可以节省不必要的空间浪费。

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

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

实际上,64位是最大长度,而不是设置的长度。