2014-07-07 11 views
6

ich den Fehler bekommen:Rubin - nicht unterstützte Verschlüsselungsalgorithmus (AES-256-GCM)

unsupported cipher algorithm (AES-256-GCM) (RuntimeError)

Aber ich scheine alle Anforderungen zu haben:

Ruby-Version:

$ ruby --version

ruby 2.1.2p95

OpenSSL tut Liste gcm:

$ openssl enc -help 2>&1 | grep gcm

-aes-128-ecb -aes-128-gcm -aes-128-ofb
-aes-192-ecb -aes-192-gcm -aes-192-ofb
-aes-256-ecb -aes-256-gcm -aes-256-ofb

Ruby-Interpreter:

$ irb

2.1.2 :001 > require 'openssl'; puts OpenSSL::VERSION

1.1.0

=> nil

2.1.2 :002 > OpenSSL::Cipher.ciphers.include? "aes-128-gcm"

=> true

Und doch ich bin immer Fehler laufen diese code:

2.1.2 :001 > require 'openssl' 
=> true 
2.1.2 :002 > cipher = OpenSSL::Cipher::AES.new(128, :GCM) 
RuntimeError: unsupported cipher algorithm (AES-128-GCM) 
    from /home/m/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/cipher.rb:27:in `initialize' 
    from /home/m/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/cipher.rb:27:in `block (3 levels) in <class:Cipher>' 
    from (irb):2:in `new' 
    from (irb):2 
    from /home/m/.rvm/rubies/ruby-2.1.2/bin/irb:11:in `<main>' 

Wie bekomme ich GCM in Ruby zu arbeiten?

+0

https://security.stackexchange.com/questions/30344/why-does-openssl-not-include-aes-256-gcm#comment47419_30345, vielleicht? – Ryan

+0

@false Ja, ich habe das gelesen, aber die Antwort war, OpenSSL zu aktualisieren oder Ruby zu aktualisieren, um eine aktualisierte OpenSSL-Version zu verwenden, die GCM unterstützt. Ich habe beide: Ruby-Berichte verwenden OpenSSL 1.1.0 und OpenSSL-Berichte mit gcm-Chiffren. Es scheint also nicht, dass diese Antwort auf dieses Problem zutrifft. – user3813959

+1

Ich auch und kann den gleichen Fehler reproduzieren, aber ich bin mir nicht sicher, wie viel, was es gegen gelinkt wurde und was die Bibliothek tatsächlich ist, kann es beeinflussen. (Wird es die falsche Version melden, aber immer noch nicht in der Lage, GCM zu verwenden? Ich weiß es nicht.) – Ryan

Antwort

5

Was funktioniert für mich ist

OpenSSL::Cipher.new('aes-128-gcm') 

Ich bin nicht sicher, warum Sie einen Fehler mit Ihrem Ansatz erhalten.

Edit:

Es könnte ein Groß-/Kleinschreibung Problem sein. Dies könnte ein tatsächlicher Fehler sein.

Die folgenden Werke:

OpenSSL::Cipher::AES.new(128, :CBC) 

weil wir "AES-128-CBC" (alle Großbuchstaben) in OpenSSL::Cipher::AES.ciphers finden. AES.new scheint seine Ziffern mit Großbuchstaben zu suchen.

Somit erfordert die folgenden nicht:

OpenSSL::Cipher::AES.new(128, :GCM) 

weil es "aes-128-gcm" in der Chiffren Liste ist.

Verwandte Themen