在我的凤凰项目中,我正在使用:
{: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"}
为什么会出现这种情况,如何保证给定输入的确定性散列?
答案 0 :(得分:2)
hashpwsalt
每次都会生成一个随机盐,因此每次产生的哈希值都会不同。这是生成密码哈希的推荐方法。然后使用check_pass或checkpw检查密码是否与存储的哈希匹配。如果由于某种原因您希望获得相同的哈希值,则可以直接使用该库。有关示例,请参见此处:
https://github.com/riverrun/bcrypt_elixir/blob/master/lib/bcrypt.ex#L84
但是,不能想出你想要这样做的理由。你犯错的可能性更大。