pimenvibritania / password-stretcher
密码通过PBKDF2进行"散列"处理
Requires
- php: ^7.1
This package is auto-updated.
Last update: 2024-09-12 00:44:37 UTC
README
使用具有加密随机盐的PBKDF2(默认为SHA1的64,000次迭代)对密码进行"散列"处理。
用法
要创建散列,当向您的系统添加新账户时,调用此库提供的CreateHash()
方法。要验证密码,调用此库提供的VerifyPassword()
方法。
自定义
每个实现都提供了一些可更改的常量。只有在您了解自己在做什么,并得到专家帮助的情况下才更改这些常量
-
PBKDF2_HASH_ALGORITHM
:PBKDF2使用的散列函数。默认情况下,它是SHA1,以实现实现间的兼容性,但您可以选择SHA256,如果您不关心兼容性。尽管SHA1已被作为抗碰撞函数破译,但它对于PBKDF2密码存储仍然是完全安全的。 -
PBKDF2_ITERATIONS
:PBKDF2迭代的次数。默认情况下为32,000。为了提供更高级的密码保护,以牺牲密码验证所需的更多处理能力为代价,请增加迭代次数。不应减少迭代次数。 -
PBKDF2_SALT_BYTES
:盐的字节数。默认情况下为24字节,即192位。这已经足够。此常量不应更改。 -
PBKDF2_HASH_BYTES
:PBKDF2输出字节数。默认情况下为18字节,即144位。虽然增加输出字节数可能看起来很有用,但实际上可能会给攻击者带来优势,因为它会给PBKDF2计算引入不必要的(可避免的)延迟。144位被选择是因为它(1)小于SHA1的160位输出(以避免不必要的PBKDF2开销),(2)是6位的倍数,因此base64编码是最优的。
注意,这些常量在创建散列时编码到散列字符串中,以便可以在不破坏现有散列的情况下更改它们。新(更改)的值仅适用于新创建的散列。
散列格式
散列格式由冒号(':')字符分隔的五个字段组成。
algorithm:iterations:hashSize:salt:hash
其中
algorithm
是加密散列函数的名称("sha1")。iterations
是PBKDF2迭代的次数("64000")。hashSize
是散列字段(解码后)的长度,以字节为单位。salt
是盐,base64编码。hash
是PBKDF2输出,base64编码。它必须编码hashSize
字节。
以下是几个示例散列(所有密码均为"foobar")
sha1:64000:18:B6oWbvtHvu8qCgoE75wxmvpidRnGzGFt:R1gkPOuVjqIoTulWP1TABS0H
sha1:64000:18:/GO9XQOPexBFVzRjC9mcOkVEi7ZHQc0/:0mY83V5PvmkkHRR41R1iIhx/
sha1:64000:18:rxGkJ9fMTNU7ezyWWqS7QBOeYKNUcVYL:tn+Zr/xo99LI+kSwLOUav72X
sha1:64000:18:lFtd+Qf93yfMyP6chCxJP5nkOxri6Zbh:B0awZ9cDJCTdfxUVwVqO+Mb5
更多信息
有关安全密码存储的更多信息,请参阅Crackstation关于密码散列安全的页面。