我想在 MySQL 中存储哈希密码,我正在使用 PHP:
<?php
$salt = '!£$%^&*()#';
$username = 'abc';
$password = '123';
$hash = hash('sha1', $username . $salt . $password, true);
?>
hash() 中的 true 参数将返回原始二进制数据的值。但我不明白这到底是什么意思。应该如何正确存储在MySQL中?
最佳答案
我找到了解决方案。
sha1() 的普通(十六进制)散列的长度始终为 CHAR(40)。当您在 php 中将散列作为原始二进制数据返回时,它将返回一个字符串作为 CHAR(20),节省 50% 的数据库空间但表示完全相同的值。这是因为 2 个十六进制字符可以压缩为 1 个字符,从而将所需空间减半。
因此将密码存储为 CHAR(20) 并使用 *_bin 排序规则。
关于php - 'raw binary data' 哈希应该如何存储在 MySQL 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937503/