it-swarm.com.ru

Rails 5 cipher.key «ключ должен быть 32 байта» ошибка

Совершенно новое приложение Rails.

Rails версия 5.0.0.1, Ruby версия 2.4.0preview2.

Создайте приложение "demo", запустите простой сгенерированный продукт скаффолда и получите ошибку при попытке просмотреть обзорную страницу скаффолда (базовый индексный файл все еще загружает экран Welcome to Rails):

ArgumentError в ProductsController # ключ индекса должен быть 32 байта:

  cipher = new_cipher
  cipher.encrypt
  cipher.key = @secret

  # Rely on OpenSSL for the initialization vector
  iv = cipher.random_iv

Проблемная строка, по-видимому, cipher.key = @secret.

Я видел различные упоминания в репозитории github для Rails, в которых упоминалась эта проблема, но все подразумевали, что теперь она решена в Rails 5.0.0.1

9
TheMinimalCriminal

Хорошо, с моей стороны было небольшое недоразумение, похоже, исправление будет в 5.0.1, а не 5.0.0.1

https://github.com/Rails/rails/issues/26694

3
TheMinimalCriminal

попробуй это:

rake db:create
rake db:migrate

тогда самое главное:

bundle update

Это работает для меня. 

2
Naomi Wu

Наконец-то нашел проблему! Это было из-за ошибки ... https://bugs.Ruby-lang.org/issues/12561

Если вы используете шифр, например 'aes-256-cfb', key_len равен 32, найден:

require 'openssl'
cipher = OpenSSL::Cipher.new('aes-256-cfb')
cipher.key_len # => 32

Мы ошибочно полагали, что нам нужно отправить одноразовый номер из 256 символов, но на самом деле вы должны отправить одноразовый номер из 32 символов - или используйте cipher.random_key (который внутренне использует key_len). Это никогда не было проблемой, потому что openssl обрезал одноразовый номер ... но теперь вам нужно отправить правильный одноразовый номер.

Мы получили эту ошибку при обновлении Ruby с 2.3.4 до 2.4.2.

2
xxjjnn

Решение

  1. Отредактируйте свой Gemfile
  2. Добавьте следующую строку: gem 'Rails', '~> 5.0.0', '> = 5.0.0.1'
  3. комплектация
  4. Необязательно: я использую Ruby2-4.1. (rvm устанавливает Ruby-2.4.1)

Rational: версия Rails до 5.0.0, похоже, содержит ошибку, вызывающую эту проблему. Ошибка была исправлена ​​в последней версии Rails. Если вы следовали Руководству по установке Rails ( http://railsapps.github.io/installrubyonrails-mac.html ), вы, вероятно, столкнетесь с этой проблемой на дату публикации.

Это исправление работает и проверено 

1
FlyingV

Используйте random_key, чтобы он всегда подходил.

key = cipher.random_key
cipher.key = key

ссылка http://Ruby-doc.org/stdlib-2.0.0/libdoc/openssl/rdoc/OpenSSL/Cipher.html

1
Bater

Произошла та же ошибка: Запуск обновления пакета должен помочь

0
Ahmed J.

У меня тоже была эта проблема, и я решил ее, запустив

bundle update

Убедитесь, что у вас установлена ​​последняя версия Rails.

0
DVislearning