我应该如何在MySQL中存储SHA512哈希和PASSWORD_BCRYPT?

时间:2017-01-30 21:25:23

标签: php mysql hash sha512

我试图想办法在我的数据库中存储SHA512生成的哈希。我已经搜索了谷歌“sql store hash”但没有匹配,所以......我应该使用binary吗?也许varbinary?也许别的什么?怎么样password_hash(..., PASSWORD_BCRYPT) - 我应该怎么存储这个?通过varchar

非常感谢

2 个答案:

答案 0 :(得分:1)

我不推荐使用SHA512,因为它非常快,并且不会花费很长时间。
我的建议是使用PASSWORD_BCRYPT的password_hash(),它返回一个60个字符长的字符串。所以varchar(60)将是你要走的路。

如果您正在使用它,请使用PASSWORD_DEFAULT(当前为bcrypt),如果更改,则使varchar更大一些。这有望让您使用安全的哈希算法 正如@nogad在他的评论中指出的那样:对于数据库中的字段,255应该是一个很好的大小。

答案 1 :(得分:1)

密码哈希几乎可以存储在任何可以存储完整字符串字符集的字段中,通常最好使用支持UTF-8的字段(任何形式,甚至是MySQL UTF-8),所以你可以使用VARCHARTEXT字段来存储字符串,因为它就是一个字符串。这并不特别。

有一个长度问题,该列需要足够长以存储数据而不是截断它。我认为使用password_hash的PHP PASSWORD_BCRYPT限制为60个字符,但其他散列机制会更长。

ALTER TABLE <name> ADD `passwd` TEXT CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci NOT NULL ;

作为旁注,password是一个MySQL关键字,虽然没有保留,但如果你没有命名列password,它可以使IDE更容易维护,更容易理解。< / p>