php - 'raw binary data' 哈希应该如何存储在 MySQL 中?

标签 php mysql hash

我想在 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/

相关文章:

php - 在 mysql 中使用 where 条件选择以前的 id

mysql - php mySQL 检查 Unique col 所需的唯一值?

c - 开放寻址冲突解决

sql - 在 SQL Server 中使用查询在 Base64 中哈希 MD5

php - 在 PHP 中替换 UTF-8 KeyCap 数字字符

php - 更新脚本不起作用?

mysql - 可以在同一个 SQL 查询中使用两个 GROUP_CONCAT 吗?

javascript - 如何动态计算每页分页显示多少个项目

ruby - 如何在 ruby​​ 中转置两个散列以生成单个散列或数组?

php - 在 Joomla 模块中使用区域设置日期格式