PHP password_hash():密码哈希是否可以在系统之间移植


PHP password_hash(): Are password hashes portable between systems?

我相信

使用PHP的password_hash()函数散列的密码可以转移到不同的系统,并且仍然可以成功地用于验证目的。

据我了解,bcrypt哈希包含所有必要的组件,当与纯文本密码结合使用时,可以验证给定的密码。因此,哈希可以带到具有兼容实现的任何系统并用于验证目的。

很快就会尝试这个,但在我这样做之前,我想知道我的理论是否正确。

这是对的吗?

是的,这是正确的。password_verify的文档指出:

请注意,password_hash()返回算法、成本和盐作为一部分 返回的哈希值。因此,所需的所有信息 验证哈希是否包含在其中。这允许验证功能: 验证哈希,而无需单独存储盐或 算法信息。

当然,通过检查password_hashcrypt的输出也很容易看出这些信息的存在(也就是说,过度概括一下,大部分是同一件事)。

是的,基于crypt()的哈希是可移植的;它们可以传输到任何系统,并且可用于成功验证给定的密码,因为它包含执行此验证所需的所有数据。

请注意,由于所需的迭代次数较多,高成本因素可能会导致较少的系统需要更长的时间来验证密码。

还要注意存储要求;如果你总是要使用bcrypt,那么将密码哈希存储在varchar(60)列中是安全的。否则建议varchar(255)

bcrypt algorythm 包括它自己的向量和/或盐,应该是可移植的。哈希和 vecotor/salt 都不包含特定于系统的任何内容。

这也应该适用于任何其他不使用vecotr(或哈希以外的其他元素)或在其输出中包含此哈希值的算法。

我不知道

你想在哪里保存哈希,但如果你把它保存到数据库,使用数据库自己的加密/哈希函数抱怨它

示例(使用加密)

INSERT INTO table (pass_hash,....) VALUES ( MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 (" $password ") )
SELECT * FROM table WHERE pass_hash = MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 (" $password ")