如何将'原始二进制数据'哈希存储在MySQL中?

Dax*_*Dax 3 php mysql hash

我想在MySQL中存储哈希密码,我正在使用PHP:

<?php
    $salt = '!£$%^&*()#';
    $username = 'abc';
    $password = '123';
    $hash = hash('sha1', $username . $salt . $password, true);
?>
Run Code Online (Sandbox Code Playgroud)

hash()中的true参数将返回值作为原始二进制数据.但我不明白这究竟意味着什么.如何正确存储在MySQL中?

Dax*_*Dax 5

我找到了解决方案.

sha1()的正常(hexed)哈希长度始终为CHAR(40).当你在php中返回一个哈希作为原始二进制数据时,它将返回一个字符串作为CHAR(20),保存50%的数据库空间,但仍然代表完全相同的值.这是因为可以将2个十六进制的字符压缩成1个字符,从而将所需的空间减半.

因此将密码存储为CHAR(20)并使用*_bin整理.