我正在将一个项目从Symphony迁移到Django。我需要使用密码导入所有用户。
为此,我需要知道密码如何存储在数据库中。对于每个用户密码,我需要了解4件事:
用于生成哈希的算法
迭代次数
用于生成哈希的盐
该项目基于Symphony 3.4。开发人员对我说,他们使用的是默认的哈希算法,它是SHA512
我想迭代次数是1。
左查找盐和结果哈希。两者都应存储在数据库中。
在数据库的密码字段中存储如下字符串:fOEJQT89OWYfI+hBHT28RpTQRiWnyo49Rtxqv6DWY/EJ6cSkFdZ0Y36VaqjWI+1NNhRGCHBBGJvwdMD1c7GZfw==
我希望在这里找到哈希和盐但这是88个符号。SHA512具有64个字节长的哈希。
此字段中存储的数据格式是什么?哈希和盐都存储在这里吗?
您必须检查app/config/security.yml
所使用的编码器。假设您有类似以下内容:
security:
encoders:
App\Entity\User: 'sha512'
它将使用具有默认设置的SHA512编码器。通过查看相应的编码器MessageDigestPasswordEncoder
,我们可以收集到默认情况下它将使用5000次迭代,然后对它进行base64编码。
剩下的唯一一件事就是弄清楚是否使用了盐,以及如何产生盐。由于SHA512不会生成它自己的盐,因此您必须查看用户类并检查其MessageDigestPasswordEncoder
方法。如果返回的是null,则不使用任何盐,否则在生成密码时必须模仿其行为或检索结果。