在MySQL中存储哈希密码

Yso*_*oL8 9 mysql passwords hash

我正在使用PHP中的salted sha1创建散列密码.

我的问题是:在MySQL中,什么是正确的字符编码,字段类型和长度来存储结果?

MySQL中还有其他什么可以考虑密码安全吗?最后是SHA256还是SHA512实用的散列选择?

Mar*_*ins 12

SHA-2算法(SHA-256,SHA-512)是有效的选择; 但是它们需要更多存储空间 例如,要存储SHA-256的十六进制数字,您需要一个CHAR(64)字段.有一些问题是关于SHA-1是否"破碎" Schneier讨论过它NIST评论.如果那些与您有关,那么使用SHA-2函数之一可能会更好.

如果你想增加蛮力攻击的成本,你也可以考虑使用PBKDF2等算法添加一些迭代.有人在评论中发布了一个例子.

  • @JDelage:我只是指存储它所需的十六进制数字.输出为256位=> 32字节=> 64位十六进制数字.如果存储是一个问题,它可以以32字节存储在某种原始/二进制字段类型中. (2认同)

Rex*_*ars 5

对于SHA1哈希,CHAR(40)将是最佳字段类型和长度.字符编码无关紧要,所有字符都在ASCII范围内.为了保持一致性,我将使用与数据库其余部分相同的字符集.