和我一起打击弱密码哈希.
PBKDF2密码哈希应该包含salt,迭代次数和哈希本身,以便以后验证.对于PBKDF2密码哈希,是否有标准格式,如RFC2307的{SSHA}?BCRYPT很棒,但PBKDF2更容易实现.
显然,没有规范.所以这是我的规格.
>>> from base64 import urlsafe_b64encode >>> password = u"hashy the \N{SNOWMAN}" >>> salt = urlsafe_b64decode('s8MHhEQ78sM=') >>> encoded = pbkdf2_hash(password, salt=salt) >>> encoded '{PBKDF2}1000$s8MHhEQ78sM=$hcKhCiW13OVhmLrbagdY-RwJvkA='
更新:http://www.dlitz.net/software/python-pbkdf2/定义crypt()
替换.我更新了我的小规格以匹配他,除了他的开头$p5k2$
而不是{PBKDF2}
.(我需要远离其他LDAP风格的{SCHEMES}).
这是{PBKDF2}
,迭代的在小写十六进制数,$
中,urlsafe_base64
编码的盐,$
以及urlsafe_base64
编码的PBKDF2输出.salt应该是64位,迭代次数应该至少为1000,具有HMAC-SHA1输出的PBKDF2可以是任意长度.在我的实现中,默认情况下总是20个字节(SHA-1哈希的长度).
在通过PBKDF2发送之前,密码必须编码为utf-8.没有关于它是否应该归一化为Unicode的NFC的说法.
iterations
与{SSHA}相比,这种方案应该比蛮力更加昂贵.