我有一个如下数据库:
create table user (id int primary key auto increment,
username varchar(64),
password varchar(128), # sha512 hash of password
password_salt varchar(128) # sha512 hash of a random number used as salt
)
使用salt确保密码安全性是一个好主意吗?盐应该多久?我认为使用128位(SHA-512)盐不会有什么坏处,但我以前错了。
答案 0 :(得分:1)
我有几条评论:
每个用户的盐应该是随机且唯一的,但它们don't have to be a hash digest。盐的想法只是使每个用户的哈希摘要唯一,以抵抗字典攻击和彩虹表攻击。无论盐的长度如何,盐都不会增加散列摘要算法的强度。
DES使用12位盐。更新的UNIX密码系统使用更多,最多128位。
FWIW,无论输入的长度如何,SHA-512哈希摘要(编码为十六进制数字)始终都是128个字符。所以我使用CHAR(128)而不是VARCHAR(128)。使用BINARY(2)或BINARY(3)作为盐。