Security 我的密码应该有多大?
可能重复:Security 我的密码应该有多大?,security,database-design,password-hash,Security,Database Design,Password Hash,可能重复: 我有一个如下所示的数据库: 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确保密码安
我有一个如下所示的数据库:
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)的盐不会有什么坏处,但我以前就错了 我有几点意见:
- 盐应该是随机的,每个用户都是唯一的,但它们是不同的。salt的想法只是让散列摘要对每个用户都是唯一的,以抵抗字典攻击和彩虹表攻击。不管salt的长度如何,salt都不会增加哈希摘要算法的强度
- DES对盐使用12位。更新的UNIX密码系统使用更多的密码,最多128位 如果你想要更强的密码,考虑使用或.
- FWIW,一个SHA-512哈希摘要(编码为十六进制数字)总是正好是128个字符,而不管输入的长度如何。所以我用CHAR(128)代替VARCHAR(128)。使用二元(2)或二元(3)作为盐
password=sha512(原始密码+sha512(介于0和10亿之间的随机数)
@Jonathan Leffler:赢了太多了!在普通哈希上使用bcrypt
或PBKDF2
的优势是最重要的,因为它可以减缓暴力攻击。盐的随机性并不是特别重要,因为正如比尔所说的,它最重要的特性是唯一性,对于这一点,128位就足够了。