密码哈希和盐如何存储在 Symfony 数据库中?
How password hash and salt stored in Symfony database?
我正在将一个项目从 Symfony 迁移到 Django。我需要导入所有带密码的用户。
为此,我需要知道密码是如何存储在数据库中的。对于每个用户密码,我需要知道 4 件事:
该算法用于生成哈希
迭代次数
盐被用来生成散列
结果散列
该项目建立在 Symfony 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 不会生成它自己的盐,因此您必须查看用户 class 并检查其 User::getSalt
方法。如果此 returns 为 null,则没有使用盐,否则您将不得不模仿其行为或在生成密码时检索结果。
我正在将一个项目从 Symfony 迁移到 Django。我需要导入所有带密码的用户。
为此,我需要知道密码是如何存储在数据库中的。对于每个用户密码,我需要知道 4 件事:
该算法用于生成哈希
迭代次数
盐被用来生成散列
结果散列
该项目建立在 Symfony 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 不会生成它自己的盐,因此您必须查看用户 class 并检查其 User::getSalt
方法。如果此 returns 为 null,则没有使用盐,否则您将不得不模仿其行为或在生成密码时检索结果。