MySQL表中的64位密码哈希值

bey*_*ski 3 php mysql hash database-schema

我用这个函数来哈希我的密码:

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

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

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

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

Tre*_*rth 5

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

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

  • 嗯,实际上你使用varchar的1字节开销与char相比,多少差异使得另一个故事:) (2认同)

Que*_*low 5

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