我'm attempting to import scrypted hashes generated by ruby' s scrypt进入Firebase .

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

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

另一方面,Firebase期望here描述几个输入 . 他们是:

  • 哈希键(必填)

  • 盐分离器(可选)

  • 轮(必填)

  • mem-cost(必填)

  • 密码哈希(必填)

  • 密码盐(必填)

So, how do I map from the scrypted hash to those inputs?


挖掘一下,如果添加调试器并输出thing,那么你可以看到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希望它作为命令行arg,这意味着它会被重用于每个密码,从而进行某种全局设置 . 那些似乎没有加起来 .