2

我正在尝试将 ruby​​ 的scrypt生成的加密哈希导入 Firebase。

Ruby 的 scrypt 没有定义(我可以说)它的输出是什么。它看起来像这样:

[1] pry(main)> SCrypt::Password.create("somepassword")
=> "400$8$3a$a5063a5e21eb268f$4e93e29c3511a6e44900c251a11dc4f6db17cfc7f5ae0272a4b6179804474037"

另一方面,Firebase 需要此处描述的几个输入。他们是:

  • 哈希键(必需)
  • 盐分离器(可选)
  • 回合(必填)
  • 内存成本(必填)
  • 密码哈希(必填)
  • 密码盐(必填)

那么,我如何从加密的哈希映射到这些输入?


深入研究一下,如果你添加一个调试器并输出这个东西,那么你可以看到 salt 是 SCrypt::Password 输出的一部分:

[1] pry(main)> hashed_password = SCrypt::Password.create('somepassword')
400$8$37$7be9f9deb4e3b1ea
=> "400$8$37$7be9f9deb4e3b1ea$8f9d51c642c4a40341613093bde6935cccc7d6af379eedfe900476f3bec6fbde"
[2] pry(main)> split = hashed_password.split('$')
=> ["400", "8", "37", "7be9f9deb4e3b1ea", "8f9d51c642c4a40341613093bde6935cccc7d6af379eedfe900476f3bec6fbde"]
# salt
[3] pry(main)> split[0,4].join('$')
=> "400$8$37$7be9f9deb4e3b1ea"

但是我们仍然缺少一些东西。IMO,“哈希键”是最大的问号。Scrypt(gem)不会在任何地方初始化 - 所以没有存储特定于我的应用程序的密钥。它似乎也不是散列输出的一部分 - 所以它也没有与它一起存储。也就是说,Firebase 期望它作为命令行参数,这意味着它被重复用于每个密码,因此是某种全局设置。这些似乎没有加起来。

4

0 回答 0