Authentication 在';s hashpwsat()确定性(凤凰城)

Authentication 在';s hashpwsat()确定性(凤凰城),authentication,hash,elixir,phoenix-framework,bcrypt,Authentication,Hash,Elixir,Phoenix Framework,Bcrypt,在我的凤凰城项目中,我使用: {:comeonin, "~> 4.0"}, {:bcrypt_elixir, "~> 0.12.0"}, 我看到很多用户创建/身份验证的示例,其中使用一个参数调用Comeonin.Bcrypt.hashpwsalt(password)。但是,当我从iex运行此操作或从iex运行添加散列()时,输出似乎是不确定的: iex(10)> password = Comeonin.Bcrypt.hashpwsalt("password") "$2

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

  {:comeonin, "~> 4.0"},
  {:bcrypt_elixir, "~> 0.12.0"},
我看到很多用户创建/身份验证的示例,其中使用一个参数调用
Comeonin.Bcrypt.hashpwsalt(password)
。但是,当我从iex运行此操作或从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"}

为什么会发生这种情况?我如何保证给定输入的确定性哈希值?

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


我想不出你为什么要这么做。很可能是您犯了错误。

因为返回的值包含一个salt以及散列值,并且salt是随机的。看,谢谢。我肯定想得太多了。