在我的系统中,每个用户可以拥有多个api密钥。 我想哈希api密钥并在数据库中存储它们的哈希值。 我正在使用comeonin。

1)存储api密钥的哈希值而不是它们简单的原始值是否合理?

2)当api请求进来时,其中只有一个普通的api键值,并且没有用户发送电子邮件 - 这是我的系统设计的。

我该如何检查api密钥是否有效? 我是否必须这样做 - 重新计算哈希值?

given_api_plain_key = get_key_from_request()

# re-hash it again
# but how about the original salt???

given_api_hash_key = Comeonin.Bcrypt.hashpwsalt(given_api_plain_key)


case Repo.get_by(ApiKey, key_hash: given_api_hash_key) do
  nil -> IO.puts("not found")
  a -> IO.puts("gooood")
end

或者,还有更好的方法?

#1楼 票数:3

(1)存储api密钥的哈希值而不是它们简单的原始值是否明智?

您的目标似乎是防止在有人访问您的数据库时可能发生的重大妥协(例如,通过SQL注入,命令注入或系统上的反向shell)。 在这种情况下,是的,这是明智的,特别是如果每​​个用户具有不同的API密钥。 但是,对于可能影响您决策的其他考虑因素, 此链接值得一读。

(2)如何检查api密钥是否有效?

很明显,您需要哈希输入并查看是否与数据库中的某些内容匹配。

(3)实施。

您不希望应用与密码相同的保护。 密码本质上往往具有低熵,因此我们需要像bcrypt这样的工具来处理它们。 Bcrypt设计缓慢(防止暴力攻击),并使用盐来帮助选择不当的密码的安全性。

API密钥不应该具有低熵,因此您不需要慢速函数来处理它们。 实际上,缓慢的功能会带来DoS风险,因此您绝对不希望每次请求都进行bcrypt。Salting也会使您的用例变得复杂(当您知道谁在提供输入时,salt工作,但在您的情况下,您不会知道它是谁来的事先)。

简短回答:只需使用SHA256,不需要盐。

  ask by Jily translate from so

未解决问题?本站智能推荐:

1回复

使用Comeonin将bcrypt密码哈希从Laravel应用迁移到Elixir应用

我正在将Laravel 5应用程序重新平台化为Elixir Phoenix,并希望评估使用其密码迁移用户帐户的可行性。 laravel应用使用默认的Bcrypt密码哈希,示例哈希如下所示: 我正在使用Phoenix应用程序的Comeonin库,该库会生成如下所示的哈希: 当我尝
1回复

使Comeonin的hashpwsalt()具有确定性(Phoenix)

在我的Phoenix项目中,我正在使用: 我看到许多用户创建/身份验证的示例,其中使用一个参数调用Comeonin.Bcrypt.hashpwsalt(password) 。 然而,当我运行它,或add_hash()从iex ,好像输出是不确定的: 为什么会发生这种情况,如何保
1回复

Elixir的粉刺似乎没有正确检查哈希

因此,我最近决定要学习新的一年的Elixir,并且一直在阅读Phoenix框架的书,其中介绍了Web开发如何在Elixir中工作。 到目前为止,我真的很喜欢它,并且已经开始喜欢这种语言。 不过,我遇到了Come-on-in软件包的一些问题。 一个人正在编译它,很好。 但是我想知道
1回复

Phoenix app中可能的DoS /是否有必要进一步消毒用户输入?

从理论上讲,可以通过在内存中创建太多原子来取消Phoenix / Elixir应用程序。 由于原子不是垃圾收集,这可能会导致内存溢出。 我可以想象,攻击者可能会使用用户输入(如通过表单/ REST API)来创建任意数量的原子,足以使应用程序崩溃。 当然凤凰卫视似乎已经做得很好。 所
1回复

Phoenix Elixir不会安装依赖项(comeonin)

我有一个运行中的phoenix应用程序,我正在尝试安装一个名为comeonin的新依赖项 我在应用程序列表的末尾像这样在mix.exs文件中添加了依赖项。 但是,当我运行mix deps.get它似乎会忽略该依赖项并不会安装它: 而且它既没有出现在deps /文件夹中
2回复

Elixir / Phoenix New Project Comeonin.Bcrypt不可用

首先,我正在Windows 10中进行开发。每次编译之前,我都运行vcvarsall.bat amd64 。 我在用: 药剂1.4.2 凤凰v1.2.1 我开始了一个全新的项目,制作了一个users表,一切正常。 我添加了comeonin以对pw进行哈希处理,因此我
2回复

使用Elixir / Phoenix调用API端点

我试用了sportradar API。 我真的不关心运动,但我正在努力学习凤凰和Elixir。 我正在尝试做一些超级基本的东西,但似乎无法实现。 基本上,我正在尝试使用给定的参数建立一个URL并调用API端点。 获取响应并使用返回的内容填充视图。 这就是我被困住的东西。 CONT
1回复

Elixir Phoenix Restful到websocket API

RESTful to websocket API问题:我想启用一个与websockets接口的RESTful API。 我有一些硬件可以维持与我的Phx.server的WS连接,并且我希望允许其他客户端通过RESTful api访问phx.server并与WS连接的硬件进行交互。 我