web-dev-qa-db-fra.com

Rails 5 cipher.key "clé doit être de 32 octets" erreur

Nouvelle application Rails.

Rails version 5.0.0.1, Ruby version 2.4.0preview2.

Créez une application "démo", exécutez un simple produit généré par un échafaudage et obtenez une erreur lorsque vous essayez d'afficher la page de synthèse de l'échafaud (le fichier d'index de base charge toujours l'écran de bienvenue dans Rails):

ArgumentError dans ProductsController # index Doit avoir une taille de 32 octets:

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

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

La ligne de problème est apparemment cipher.key = @secret.

J'ai vu diverses mentions dans le dépôt github de Rails mentionnant ce problème, mais tout impliquait qu'il était maintenant résolu dans Rails 5.0.0.1

9
TheMinimalCriminal

Ok, il y a eu un léger malentendu de ma part, on dirait que le correctif arrive 5.0.1 et non 5.0.0.1

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

3

essaye ça:

rake db:create
rake db:migrate

alors, la chose la plus importante:

bundle update

Cela fonctionne pour moi. 

2
Naomi Wu

Problème enfin trouvé! C'était à partir d'un bug ... https://bugs.Ruby-lang.org/issues/12561

Si vous utilisez un chiffrement, par exemple 'aes-256-cfb', le key_len est 32, trouvé par:

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

Nous avions pensé à tort que nous devions envoyer un nonce de 256 caractères, mais vous êtes censé envoyer un nonce de 32 caractères - ou Use cipher.random_key (qui utilise en interne le key_len). Cela n’a jamais été un problème car openssl a tronqué le nonce ... mais maintenant, vous devez envoyer le nonce de la bonne longueur.

Nous avons eu cette erreur lors de la mise à niveau de Ruby de 2.3.4 à 2.4.2.

2
xxjjnn

Solution

  1. Editez votre Gemfile
  2. Ajoutez la ligne suivante: gem 'Rails', '~> 5.0.0', '> = 5.0.0.1'
  3. installation groupée
  4. Facultatif: j'utilise Ruby2-4.1. (rvm installe Ruby-2.4.1)

Rational : La version de Rails antérieure à la version 5.0.0 semble contenir un bogue qui cause ce problème. Le bogue a été résolu dans la dernière version de Rails. Si vous suivez le Guide d'installation Rails ( http://railsapps.github.io/installrubyonrails-mac.html ), vous rencontrerez probablement ce problème à la date de publication.

Ce correctif fonctionne et est vérifié par 

1
FlyingV

Utilisez random_key pour qu'il soit toujours adapté.

key = cipher.random_key
cipher.key = key

reference http://Ruby-doc.org/stdlib-2.0.0/libdoc/openssl/rdoc/OpenSSL/Cipher.html

1
Bater

Avait la même erreur: Lancer la mise à jour de paquet devrait faire l'affaire

0
Ahmed J.

J'avais aussi ce problème et je l'ai résolu en exécutant

bundle update

Assurez-vous d'avoir la dernière version de Rails installée.

0
DVislearning