我试图想办法在我的数据库中存储SHA512生成的哈希。我已经搜索了谷歌“sql store hash”但没有匹配,所以......我应该使用binary
吗?也许varbinary
?也许别的什么?怎么样password_hash(..., PASSWORD_BCRYPT)
- 我应该怎么存储这个?通过varchar
?
非常感谢
答案 0 :(得分:1)
我不推荐使用SHA512,因为它非常快,并且不会花费很长时间。
我的建议是使用PASSWORD_BCRYPT的password_hash(),它返回一个60个字符长的字符串。所以varchar(60)将是你要走的路。
如果您正在使用它,请使用PASSWORD_DEFAULT(当前为bcrypt),如果更改,则使varchar更大一些。这有望让您使用安全的哈希算法 正如@nogad在他的评论中指出的那样:对于数据库中的字段,255应该是一个很好的大小。
答案 1 :(得分:1)
密码哈希几乎可以存储在任何可以存储完整字符串字符集的字段中,通常最好使用支持UTF-8的字段(任何形式,甚至是MySQL UTF-8),所以你可以使用VARCHAR
或TEXT
字段来存储字符串,因为它就是一个字符串。这并不特别。
有一个长度问题,该列需要足够长以存储数据而不是截断它。我认为使用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>