问题标签 [bcrypt-ruby]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2745 浏览

ruby-on-rails - 在 Rails 中使用 BCrypt 手动验证

我正在尝试在我的 rails 应用程序中使用 BCrypt 来安全地保存用户的密码。我能够很好地保存加密密码,甚至将其与原始纯文本字符串进行比较以成功验证它。问题似乎是,每次我加密密码时,我都会得到不同的输出(我假设是由于一些盐或其他原因),并且在保存到数据库后验证不成立(我保存在sqlite3 数据库,如果它有所作为)。

例如(在 Rails 控制台中):

我知道有现成的解决方案,如 has_secure_password,但我想手动实现它以真正了解发生了什么。

0 投票
1 回答
111 浏览

ruby-on-rails - Rails 网站的 Bcrypt 可扩展性如何?

我知道 Bcrypt 的全部意义在于在散列以限制暴力攻击的实用性时会耗费大量时间。但是,这不是使它本质上不可扩展吗?例如,我读过的一个网站声称应该调整 Bcrypt 中的成本因素,以便在当前硬件上散列需要 0.25 秒。如果您有一个中等成功的网站,即使有几百人随时登录,0.25 秒的复合时间是否会使每个用户都可能等待几秒钟?散列 0.25 秒时服务器的 CPU 是否会达到最大值,从而导致持续的高资源使用?

作为第二个问题,假设它是可扩展的(我确信它是可扩展的),这些天合适的成本因素是多少?

0 投票
3 回答
3258 浏览

ruby-on-rails - 带有 Omniauth 身份的“BCrypt::Errors::InvalidHash: invalid hash”

我有一个带有 Omniauth Identity 的 Rails 4 应用程序,在生产中我为一些用户(一些)遇到了一些错误:

我已经使用 hash_valid 方法测试了所有身份密码摘要?

而且都有好的。

所以我猜这个问题来自用户提供的密码,但我知道在哪里,我无法重现开发中的错误。

登录表格是一个基本的表格:

任何想法,谢谢?

0 投票
1 回答
484 浏览

ruby-on-rails - 无法让 BCrypt 身份验证工作

我正在尝试设置一个简单的 iOS/Rails 应用程序,我可以在其中创建用户并随后使用 BCrypt 对其进行身份验证。我尝试按照 BCrypt 的说明进行操作,但我的身份验证过程不起作用。对rails非常陌生,所以我确定我搞砸了一些简单的事情!

创建新用户:

在 users_controller.rb

在用户.rb

在服务器上:

在 2014-08-21 19:32:05 -0500 开始 POST "/users.json" for 192.168.2.6 由 UsersController#create as JSON 参数处理:{"username"=>"testtest", "password"=>" [FILTERED]", "user"=>{"username"=>"testtest"}} (0.1ms) 开始事务用户存在 (20.8ms) SELECT 1 AS one FROM "users" WHERE "users"."username" = 'testtest' LIMIT 1 为string列上的类型插入二进制数据password_hash SQL (0.8ms) INSERT INTO "users" ("created_at", "password_hash", "updated_at", "username") VALUES (?, ?, ?, ?) [["created_at", "2014-08-22 00 :32:05.960378"], ["password_hash", "$2a$10$UzLdD7ytQXKRDU5MhAawJuFQ3R4oQlPyXh/V4GehNP692fsSpK6wK"], ["updated_at", "2014-08-22 00:32:05.960378"], ["用户名" ]] (1.3ms) 提交事务 Rendered users/show.json.jbuilder (0.3ms) Completed 201 Created in 136ms (Views: 31.9ms | ActiveRecord: 23.5ms)

验证用户:

在 session_controller.rb 中

在用户.rb

服务器:

*开始 POST "/session" for 192.168.2.6 at 2014-08-21 19:38:26 -0500 由 SessionsController#create as / 参数处理:{"username"=>"testtest", "password"=>"[ FILTERED]", "session"=>{"username"=>"testtest", "password"=>"[FILTERED]"}} 用户负载 (0.2ms) SELECT "users".* FROM "users" WHERE "users "."username" = 'testtest' LIMIT 1 Rendered sessions/fail.json.jbuilder (0.2ms) Completed 200 OK in 105ms (Views: 23.3ms | ActiveRecord: 0.2ms)*

非常感谢您的任何见解!

0 投票
2 回答
655 浏览

ruby-on-rails - 我的 bcrypt gem 不工作

我已经成功安装bcrypt - 3.1.7,之后安装了捆绑包。

但是,bcrypt gem 没有出现在列表中,当我尝试捆绑显示 bcrypt 时,它说:

另外,当我这样做时:

gem 'bcrypt', '~> 3.1.7'

它说:

ERROR: While executing gem.. (Gem::CommandLineError) Unknown command bcrypt

我应该怎么办?

0 投票
1 回答
538 浏览

ruby - 为什么 Ruby 的 bcrypt 库在哈希中包含明文中的盐?

我正在使用 Coda Hale 的Ruby bcrypt 库。我最近注意到它并没有像我想象的那样工作。我原以为正确的程序是:

  1. 生成盐
  2. 获取密码
  3. 连接盐和密码字符串
  4. 通过您的散列函数对它们进行散列

但是当我查看 bcrypt 函数的结果时,似乎 salt 是连接到hash而不是password。那就是盐连接发生在步骤#4之后,而不是之前。我假设 Coda Hale 做得对,但我想知道为什么它会这样。

这是一个简短的 IRB 会议,展示了(对我而言)什么是奇怪的。请注意,在hash_secret函数的结果中,前 29 个字符与 salt 相同。任何关于为什么会这样的信息将不胜感激。

我唯一的理论是盐是预先添加嵌入在哈希中的,这消除了将盐存储在单独的数据库字段中的需要(本质上是一种记录打包策略)?

0 投票
1 回答
306 浏览

ruby - Ruby BCrypt 密码比较返回不正确的评估

为了安全地存储我的用户密码,我尝试在我的 Sinatra/Ruby 应用程序中使用 BCrypt。

以下代码是我的用户模型。

当我像这样调用 authenticate 方法时:User.authenticate("bar@foo.com", "admin"),代码返回 false。我确定用户存在。

编辑: u.password == requested_password也返回 false

为什么会发生这种情况,即使传递给方法的值是有效且正确的?

0 投票
1 回答
75 浏览

ruby-on-rails - 测试环境中使用 Rails 的 user.authenticate() 的意外行为

我想对登录流程进行验收测试,但我遇到了意外的user.authenticate方法行为。

开发环境中的身份验证按预期工作:带有电子邮件和普通密码对的 POST 完美通过。当我运行测试时出现问题:使用普通密码的身份验证失败。但奇怪的是,它成功了密码的 hash

这是代码:

class SessionsController < ApplicationController ... def create user = User.find_by_email(params[:email].downcase) logger.debug Rails.env logger.debug "password #{params[:password]}" logger.debug user.authenticate(params[:password]).to_yaml ...

以下是不同环境的日志:

env development password 123456 --- !ruby/object:User

env test password 123456 --- false

env test password $2a$10$70AlnpaXIMHtjDUei/1HU.OSEG4WVjW6ens3jzN04bC8SOxTv2Ftm --- !ruby/object:User

知道我该怎么做才能在测试环境中使用纯密码成功进行身份验证吗?

bcrypt-ruby在 ActiveModel 对象中使用密码。

谢谢。

0 投票
0 回答
1197 浏览

ruby-on-rails - Openshift 不安装 bcrypt

我正在尝试将我的 Ruby on Rails 应用程序推送到 OpenShift,但是 gem 文件 bcrypt 出了点问题。本地一切正常,就在我尝试在 Openshift 端运行时发生此错误。

没有要加载的文件 - bcrypt (LoadError) /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb: 247:inrequire' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in块中的要求'/var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:232:inload_dependency' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in要求' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activemodel-4.1.1/lib/active_model/secure_password.rb:49:in has_secure_password' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/app/models/user.rb:13:in' /var/lib/openshift /548f13fce0b8cdf18c000001/app-root/runtime/repo/app/models/user.rb:1:in<top (required)>' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in需要'/var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in block in require' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:232:inload_dependency'/var/lib /openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:247:in require' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:348:inrequire_or_load' /var/lib/openshift/548f13fce0b8cdf18c000001/app -root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:307:in depend_on' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/activesupport-4.1.1/lib/active_support/dependencies.rb:225:inrequire_dependency' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo /vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/engine.rb:468:inblock (2 levels) in eager_load!' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/engine.rb:467:in每个'/var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/engine.rb:467:in block in eager_load!' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/engine.rb:465:ineach'/var/lib /openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/engine.rb:465:in eager_load!' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/engine.rb:346:ineager_load!/var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/application/finisher.rb:58:in each' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/application/finisher.rb:58:inblock in ' /var/ lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/initializable.rb:30:in instance_exec' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/initializable.rb:30:inrun' /var/lib/openshift/548f13fce0b8cdf18c000001/ app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/initializable.rb:55:inblock in run_initializers' /opt/rh/ruby200/root/usr/share/ruby/tsort.rb:150:in阻止 tsort_each' /opt/rh/ruby200/root/usr/share/ruby/tsort.rb:183:in block (2 levels) in each_strongly_connected_component' /opt/rh/ruby200/root/usr/share/ruby/tsort.rb:219:ineach_strongly_connected_component_from' /opt/rh/ruby200/root/usr/share/ruby/tsort.rb:182:inblock in each_strongly_connected_component' /opt/rh/ruby200/root/usr/share/ruby/tsort.rb:180:in每个' /opt/rh/ruby200/root/usr/share/ruby/tsort.rb:180:in each_strongly_connected_component' /opt/rh/ruby200/root/usr/share/ruby/tsort.rb:148:intsort_each' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems /railties-4.1.1/lib/rails/initializable.rb:54:inrun_initializers' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/railties-4.1.1/lib/rails/application.rb:288:in初始化!/var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/config/environment.rb:5:in <top (required)>' config.ru:1:inrequire' config.ru:1:in block in <main>' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/runtime/repo/vendor/bundle/ruby/gems/rack-1.5.2/lib/rack/builder.rb:55:ininstance_eval' /var/lib/openshift/548f13fce0b8cdf18c000001/app-root/运行时/repo/vendor/bundle/ruby/gems/rack-1.5.2/lib/rack/builder.rb:55:in initialize' config.ru:1:innew' config.ru:1:in<main>' /opt/rh/ruby200/root/usr/share/gems/gems/passenger-4.0.18/helper-scripts/rack-loader.rb:78:ineval' /opt/rh/ruby200/root/usr/share/gems/gems/passenger-4.0.18/helper-scripts/rack-loader.rb:78:in load_app' /opt/rh/ruby200/root/usr/share/gems/gems/passenger-4.0.18/helper-scripts/rack-loader.rb:96:in' /opt/rh/ruby200/root/usr/共享/gems/gems/passenger-4.0.18/helper-scripts/rack-loader.rb:4:in <module:PhusionPassenger>' /opt/rh/ruby200/root/usr/share/gems/gems/passenger-4.0.18/helper-scripts/rack-loader.rb:3:in'

我最新的宝石文件:

源' https://rubygems.org '
...
gem 'bcrypt'
gem 'bcrypt-ruby'
...

我的 Gemfile.lock 包含所需的所有依赖项。

要知道的一个重要事实是,推送修改后的 Openshift 控制台不会安装 gem 文件 bcrypt 和 bcrypt-ruby。跟随 optput

远程:停止 Ruby 墨盒
远程:修复 1 个部署的链接

远程:启用强制清理构建 - 清理依赖
项远程:构建 git ref 'master',提交 cab854c
远程:构建 Ruby 墨盒
远程:捆绑安装 --deployment --path ./app -root/repo/vendor/bundle
remote:注意:您可以使用以下命令阻止安装某些 Gemfile 组:rhc env set
BUNDLE_WITHOUT=groupname remote:从https://rubygems.org/
获取 gem 元数据........ 远程:安装rake(10.4.2) 远程:安装i18n(0.6.11) 远程:安装json(1.8.1) 远程:安装minitest(5.5.0)




远程:安装thread_safe(0.3.4)
远程:安装tzinfo(1.2.2)
远程:安装activesupport(4.1.1)
远程:安装builder(3.2.2)
远程:安装erubis(2.7.0)
远程:安装actionview( 4.1.1)
远程:安装机架(1.5.2)
远程:安装机架测试(0.6.2)
远程:安装actionpack(4.1.1)
远程:安装mime-types(1.25.1)
远程:安装多语言(0.3 .5)
远程:安装树顶(1.4.15)
远程:安装邮件(2.5.4)
远程:安装actionmailer(4.1.1)
远程:安装activemodel(4.1.1)
远程:安装arel(5.0.1.20140414130214)
远程:安装activerecord(4.1.1)
远程:安装execjs(2.2.2)
远程:安装autoprefixer-rails(4.0.2.1)
远程:安装sass(3.2.19)
远程:安装bootstrap-sass(3.3.1.0)
远程:安装bootstrap_form(2.2.0)
远程:安装子进程(0.5.5)
远程:安装咖啡脚本源(1.8.0)
远程:安装咖啡脚本(2.3.0)
远程:安装雷神(0.19.1)
远程:安装 railties (4.1.1)
远程:安装 coffee-rails (4.0.1)
远程:安装远足 (1.2.3)
远程:安装 multi_xml (0.5.5)
远程:安装 httparty (0.13.3)
远程:安装 multi_json (1.10.1)
远程:安装 jbuilder (2.2.5)
远程:安装 jquery-rails (3.1.2)
远程:安装 mysql2 (0.3.17)
远程:使用捆绑器 (1.3.5)
远程:安装倾斜(1.4.1)
遥控器:安装链轮(2.11.0)
遥控器:安装链轮导轨(2.2.2)
遥控器:安装导轨(4.1.1)
遥控器:安装rdoc(4.2.0)
遥控器:安装rubyzip(0.9 ) .9)
远程:安装 sass-rails (4.0.5)
远程:安装 sdoc (0.4.1)
远程:安装 websocket (1.0.7)
远程:安装 selenium-webdriver (2.35.1)
远程:安装 turbolinks (2.5. 3)
远程:安装 uglifier (2.6.0)
远程:安装 validates_cpf_cnpj (0.2.0)
远程:冻结时无法写入更改的锁定文件。
远程:您的捆绑包已完成!
远程:它已安装到 ./vendor/bundle
远程:来自 httparty 的安装后消息:
远程:当您使用 HTTParty 时,您必须全力以赴!
远程:来自 rdoc 的安装后消息:
远程:根据您的 ruby​​ 版本,您可能需要安装 ruby​​ rdoc/ri 数据:
远程:
远程:<= 1.8.6:不支持
远程:= 1.8.7:gem install rdoc -数据; rdoc-data --install
remote: = 1.9.1 : gem install rdoc-data; rdoc-data --install
remote: >= 1.9.2 : 无事可做!耶!
远程:准备构建以进行部署

显然错误是因为没有安装 gem 文件,但问题是为什么?

0 投票
3 回答
1556 浏览

ruby-on-rails - 安装 bcrypt gem 失败

使用来自 OP 的附加信息进行编辑: