database - 密码哈希和盐如何存储在 Symfony 数据库中?
问题描述
我正在将一个项目从 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 编码器。通过查看相应的 Encoder MessageDigestPasswordEncoder
,我们可以得知它默认使用 5000 次迭代,然后对其进行 base64 编码。
剩下的唯一事情就是弄清楚是否使用了盐,如果使用了,它是如何产生的。由于 SHA512 不会生成它自己的盐,因此您必须查看用户类并检查其User::getSalt
方法。如果返回 null,则没有使用盐,否则您将不得不模仿其行为或在生成密码时检索结果。
推荐阅读
- haskell - Monad 是否有标准名称(和库实现)将计算隐藏在构造函数后面?
- python - 如何在不使用 Django Rest Framework 的情况下输出外键的值
- python - Python super init 自定义套接字类
- pyspark - 用条件计算总和
- vue.js - vuejs 2 到 vuejs 3,如何在 contenteditable 中插入组件?
- wpf - How to identify the DataContext of different items in .xaml?
- angular - PrimeNg 多选返回空值
- windows - Bamboo 无法运行任务 - 空指针异常
- python - 而不是显示有关标签('li' - 标签)的信息,它会抛出 AttributeError
- python - 如何创建机器学习模型列表?