8

エラーが発生します:

サポートされていない暗号アルゴリズム (AES-256-GCM) (RuntimeError)

しかし、私はすべての要件を持っているようです:

ルビーのバージョン:

$ ruby​​ --バージョン

ルビー 2.1.2p95

OpenSSL は 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 インタープリター:

$ irb

2.1.2 :001 > 'openssl' が必要です。puts OpenSSL::VERSION

1.1.0

=>なし

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

=>真

それでも、このコードを実行するとエラーが発生します:

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>'

RubyでGCMを動作させるにはどうすればよいですか?

4

2 に答える 2

7

私にとってうまくいくのは

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

アプローチでエラーが発生する理由がわかりません。

編集:

大文字/小文字の問題かもしれません。これは実際のバグである可能性があります。

以下の作品:

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

"AES-128-CBC"(すべて大文字) があるためOpenSSL::Cipher::AES.ciphersです。AES.new大文字で暗号を検索するようです。

したがって、以下は機能しません。

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

それは"aes-128-gcm"暗号リストにあるからです。

于 2014-07-07T21:14:24.207 に答える