我使用这个函数来散列我的密码:
// 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位是最大长度,而不是设置的长度。