【发布时间】:2017-06-05 06:37:00
【问题描述】:
密码通常是任意字符串,例如“abc”、“1234”。但是像DES这样的加密算法需要一个固定长度的密钥。我想知道如何通过公认的方式将可变长度密码转换为固定长度密钥。
【问题讨论】:
标签: encryption passwords password-encryption
密码通常是任意字符串,例如“abc”、“1234”。但是像DES这样的加密算法需要一个固定长度的密钥。我想知道如何通过公认的方式将可变长度密码转换为固定长度密钥。
【问题讨论】:
标签: encryption passwords password-encryption
使用基于密码的密钥派生函数从密码中派生加密密钥:PBKDF2(又名Rfc2898DeriveBytes)。使用随机盐和迭代计数,这样推导需要大约 100 毫秒的计算时间。
必须使用相同的盐和迭代计数来获取解密密钥,它们可以添加到加密数据之前,因为它们不需要保密。
仅使用哈希函数是不够的,仅添加盐对提高安全性无济于事。
关键是让攻击者花费大量时间通过蛮力寻找密码。
【讨论】:
您需要使用盐值(以防止字典攻击)和良好的密钥偏差函数,如 scrypt、bcrypt 或 PBKDF2。
如果只使用哈希函数生成密钥,那么生成的密钥很可能是 SHA256("abcd") 或 SHA256("password")。也就是说,这种方法非常容易受到暴力攻击。
【讨论】: