【问题标题】:Activesupport and openssl: key must be 32 bytesActivesupport 和 openssl:key 必须是 32 字节
【发布时间】:2018-09-28 16:00:32
【问题描述】:

我有一个 Rails 4.2.1 项目,它需要一个依赖于 openssl 2.1.1 的 gem。我的红宝石版本是 2.3.1。当我添加 openssl gem 时,我加载的任何页面都会出现以下错误:

lib/active_support/message_encryptor.rb:100: warning: constant OpenSSL::Cipher::Cipher is deprecated

ArgumentError (key must be 32 bytes):
activesupport (4.2.1) lib/active_support/message_encryptor.rb:72:in `key='
  activesupport (4.2.1) lib/active_support/message_encryptor.rb:72:in `_encrypt'
  activesupport (4.2.1) lib/active_support/message_encryptor.rb:58:in `encrypt_and_sign'
  actionpack (4.2.1) lib/action_dispatch/middleware/cookies.rb:527:in `[]='
  actionpack (4.2.1) lib/action_dispatch/middleware/session/cookie_store.rb:110:in `set_cookie'
  rack (1.6.10) lib/rack/session/abstract/id.rb:351:in `commit_session'
  rack (1.6.10) lib/rack/session/abstract/id.rb:226:in `context'
  rack (1.6.10) lib/rack/session/abstract/id.rb:220:in `call'
  actionpack (4.2.1) lib/action_dispatch/middleware/cookies.rb:560:in `call'

是否有任何解决方法可以使两者兼容?

【问题讨论】:

    标签: ruby-on-rails-4 openssl activesupport


    【解决方案1】:

    在不更改旧密钥的情况下,我成功使用以下代码接收密钥:

    attr_encrypted :attribute, key: ENV['MY_KEY'].bytes[0..31].pack( "c" * 32 )

    【讨论】:

    • 哼,我不明白,克里斯。你把那个代码放在哪里?抱歉,我错过了您的回复。
    • 在模型中插入需要加密属性的代码。 :attribute 必须替换为您的属性名称。
    • 它是用于cookies加密的,所以我不会以明确的方式使用它。它在引擎盖下。现在,我用this file 修改了来自activesupport 的文件key_generator.rb。它会覆盖默认的 64 键长度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多