【问题标题】:NotImplementedError: pbkdf2_hmac() function is unimplemented on this machineNotImplementedError: pbkdf2_hmac() 函数在这台机器上没有实现
【发布时间】:2015-09-02 22:31:55
【问题描述】:

我正在努力将 ruby​​ 和 rails 版本升级到我的应用程序。我使用的是 rails 3.2 和 ruby​​ '1.9.3',对于这个版本 Gibberish 在 heroku 上运行良好。在我升级了 rails 4.2 和 ruby​​ 2.2.0 之后,Gibberish 无法正常工作,并且出现了 heroku 上的错误。

于是我在heroku中新建了一个应用,配置了4.2和2.2.0,然后进行了测试。 Gibberish 工作正常,没有任何错误。但我不喜欢配置新应用程序。因为我已经在我现有的应用程序上进行了很好的配置。我错过了什么吗?这里的痕迹...

irb(main):002:0> Gibberish::AES.new("12345").encrypt("data")
NotImplementedError: pbkdf2_hmac() function is unimplemented on this machine
from /app/vendor/bundle/ruby/2.2.0/gems/gibberish-2.0.0/lib/gibberish/aes.rb:140:in `pbkdf2_hmac'
from /app/vendor/bundle/ruby/2.2.0/gems/gibberish-2.0.0/lib/gibberish/aes.rb:140:in `encrypt'
from /app/vendor/bundle/ruby/2.2.0/gems/gibberish-2.0.0/lib/gibberish/aes.rb:100:in `encrypt'
from (irb):2
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/commands/console.rb:110:in `start'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/commands/console.rb:9:in `start'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:68:in `console'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:10:in `require'
from bin/rails:10:in `<main>'

注意:我正在Gibberish上使用最新版本

提前致谢!

【问题讨论】:

  • 看看this issue 是否有帮助。 tl;博士:试试 Ruby 2.2.2。
  • 是的,有效点。但是我的带有 rails 4.2 和 ruby​​ 2.2.0 的新应用程序如何正常工作?
  • 使用 Rails 4.2、Ruby 2.2.0 和 Gibberish gem 的新应用?工作正常?报告在链接的问题中,这是重要的信息。
  • 是的,好吧,但现在我有两个应用程序。这两个应用程序都配置了 rails 4.2 和 2.2.0,其中一个应用程序运行良好,但即使我在两个应用程序上都使用最新的 Gibberish 版本,另一个应用程序也没有。
  • ...而且您没有在两者上都使用最新的 Ruby。 gem 作者声称他的 gem 在 Heroku 上使用 Ruby 2.2.2。

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 heroku


【解决方案1】:

Prior to Gibberish 2.0, the default encryption mode was CBC. But now not!.

我在验证加密格式后提出了解决方案。现在 Gibberish 正在基于 OpenSSL 版本工作。 Gibberish 2 将在 OpenSSl 的最新版本中运行。如果你想使用旧版本的 ssl,那么你必须CBC

Gibberish::AES::CBC.new("12345").encrypt("data")

乱码1.4会产生

Gibberish::AES.new("p4ssw0rd").enc("Some top secret data")
#=> U2FsdGVkX187oKRbgDkUcMKaFfB5RsXQj/X4mc8X3lsUVgwb4+S55LQo6f6N\nIDMX

但现在 CBC 将生成此格式化输出。

我建议在heroku中更新openssl。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2015-11-04
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多