制作Comeonin的hashpwsalt()确定性(Phoenix)

时间:2017-08-21 22:12:05

标签: authentication hash elixir phoenix-framework bcrypt

在我的凤凰项目中,我正在使用:

  {:comeonin, "~> 4.0"},
  {:bcrypt_elixir, "~> 0.12.0"},

我看到很多用户创建/身份验证的例子,其中Comeonin.Bcrypt.hashpwsalt(password)用一个参数调用。但是,当我从add_hash()运行此文件或iex时,输出似乎是不确定的:

iex(10)> password = Comeonin.Bcrypt.hashpwsalt("password")
"$2b$12$QUL1ytej8UqTvpU34E2oieshgOonf0RRZI0nva6T3HlK2RQ2JT74O"

iex(11)> password = Comeonin.Bcrypt.hashpwsalt("password")
"$2b$12$jz3sb5rLrmdHVRr7Nvq0te9He0Wt00DYy4kM.t9LFp6ZSx.siovJC"

iex(12)> password = Comeonin.Bcrypt.add_hash("password")
%{password: nil,
  password_hash: "$2b$12$4Ih30p4LbNk5LQStMDtah.ht0AQSO8mhhfCUeRQlFSNuI9vEgKI/q"}

iex(13)> password = Comeonin.Bcrypt.add_hash("password")
%{password: nil,
  password_hash: "$2b$12$92oe9Ccovrwi1GuHK5Zo3uaxbQEXEvgyqEx6o4tsW2J8TEsc/LrtS"}

为什么会出现这种情况,如何保证给定输入的确定性散列?

1 个答案:

答案 0 :(得分:2)

hashpwsalt每次都会生成一个随机盐,因此每次产生的哈希值都会不同。这是生成密码哈希的推荐方法。然后使用check_passcheckpw检查密码是否与存储的哈希匹配。如果由于某种原因您希望获得相同的哈希值,则可以直接使用该库。有关示例,请参见此处:

https://github.com/riverrun/bcrypt_elixir/blob/master/lib/bcrypt.ex#L84

但是,不能想出你想要这样做的理由。你犯错的可能性更大。