注:
更新时间:2019 年 5 月 11 日
理想情况下,您不应该再使用 MD5 来散列密码。PHP 手册添加了一个安全密码散列部分,例如 4 - 5 年前现在我相信在哪里解释了password_hash()
,password_verify()
为什么 MD5 / SHA1 不适合..
请记住,因为大多数 RDMS 旨在提供非常稳定的时间,因为大多数 RDMS 缓冲数据在内存和/或索引中,这使得当password
列在WHERE
子句中时很可能发生定时攻击
与 SQL 结合使用的安全方法password_verify()
是在“伪”PHP 代码中。
$row = prepare("SELECT password FROM users WHERE username = :username").execute().fetch();
if (password_verify($_POST['password'], $row->password)) {
// password correct
} else {
// password incorrect..
}
在文件 strings/ctype-bin.c 的 MySQL 源代码中,定义了 BINARY 类型。
这看起来像是默认的基于 C ascii 的字符集转换为二进制。理论上,这应该比带有 ascii_bin 字符集的 CHAR(32) 更快。
因为写入/读取二进制文件所需的时间更少,并且在索引和内存中占用的磁盘空间更少,而且 CHAR(32) 数据类型大 16 个字节
如果你想使用这个,你应该使用这个 php 代码
<?php
md5 ( "password", true ); // true returns the binary what is 16 bytes long MySQl BINARY(16)
?>