Php MySQL表中的64位密码哈希

Php MySQL表中的64位密码哈希,php,mysql,hash,database-schema,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换

我使用此函数对密码进行哈希运算:

// 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字节。

varchars只使用所需的长度来节省存储空间。如果64位哈希值始终为64,那么它在存储方面没有什么区别,因此在本例中,char可能与varchar一样好


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

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

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


事实上,如图所示,64位是最大长度,而不是设置的长度。

实际上,与char相比,varchar使用了1字节的开销,这与char有多大区别:)是否确实是这样的情况,一个base 64编码的字符串返回长度为64位的散列?“我不认为它有…@Brendanbulen-我更新了问题。对不起,这个令人困惑的例子:(它确实是一个固定长度吗?