我想在MySQL中存储哈希密码,我正在使用PHP:
<?php
$salt = '!£$%^&*()#';
$username = 'abc';
$password = '123';
$hash = hash('sha1', $username . $salt . $password, true);
?>
Run Code Online (Sandbox Code Playgroud)
hash()中的true参数将返回值作为原始二进制数据.但我不明白这究竟意味着什么.如何正确存储在MySQL中?
我找到了解决方案.
sha1()的正常(hexed)哈希长度始终为CHAR(40).当你在php中返回一个哈希作为原始二进制数据时,它将返回一个字符串作为CHAR(20),保存50%的数据库空间,但仍然代表完全相同的值.这是因为可以将2个十六进制的字符压缩成1个字符,从而将所需的空间减半.
因此将密码存储为CHAR(20)并使用*_bin整理.