Ruby 2.7.0 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::Cipherクラス

class OpenSSL::Cipher

クラス・モジュールの継承リスト: OpenSSL::Cipher < Object < Kernel < BasicObject

要約

共通鍵暗号のために抽象化されたインターフェースを提供するクラスです。

基本的にこのクラスを直接使ってデータを暗号化することは避けてください。通常はより高水準なインターフェースが利用可能なはずです。必要なのは暗号アルゴリズムを指定するため OpenSSL::Cipher.new で暗号オブジェクトを生成することだけでしょう。

もし、このクラスを直接利用して暗号化する場合は、暗号の鍵や IV(Initialization Vector)の取り扱いについて正しく理解してからにしてください。

以下の手順で利用します。

ruby 1.8.3 から Cast5 と Idea が CAST5 と IDEA に改名されました。

ブロック暗号モード

AES のようなブロック暗号では暗号方式を選択する際にモードを指定する必要があります。このライブラリでは以下のような文字列でモードを指定できます。

これらの文字列の意味は openssl/参考文献 などで調べてください。 AES を用いる場合、通常は CBC を用いれば良いでしょう。選択肢によっては安全性に問題があるので気をつけてください。

使用例

require 'openssl'

# 暗号化するデータ
data = "*secret data*"
# パスワード
pass = "**secret password**"
# salt
salt = OpenSSL::Random.random_bytes(8)

# 暗号化器を作成する
enc = OpenSSL::Cipher.new("AES-256-CBC")
enc.encrypt
# 鍵とIV(Initialize Vector)を PKCS#5 に従ってパスワードと salt から生成する
key_iv = OpenSSL::PKCS5.pbkdf2_hmac_sha1(pass, salt, 2000, enc.key_len + enc.iv_len)
key = key_iv[0, enc.key_len]
iv = key_iv[enc.key_len, enc.iv_len]
# 鍵とIVを設定する
enc.key = key
enc.iv = iv

# 暗号化する
encrypted_data = ""
encrypted_data << enc.update(data)
encrypted_data << enc.final

p encrypted_data

# 復号化器を作成する
dec = OpenSSL::Cipher.new("AES-256-CBC")
dec.decrypt

# 鍵とIVを設定する
dec.key = key
dec.iv = iv

# 復号化する
decrypted_data = ""
decrypted_data << dec.update(encrypted_data)
decrypted_data << dec.final

p decrypted_data

特異メソッド

定義 説明
ciphers -> [String]

利用可能な暗号方式名を文字列の配列で返します。

new(name) -> OpenSSL::Cipher

共通鍵暗号のアルゴリズム名を渡し、対応する暗号オブジェクトを生成します。

インスタンスメソッド

定義 説明
block_size -> Integer

暗号化のブロックのサイズをバイト数で返します。

decrypt -> self
decrypt(pass, iv = nil) -> self

復号化の準備をします。

encrypt -> self
encrypt(pass, iv = nil) -> self

暗号化の準備をします。

final -> String

暗号オブジェクト内部に残されたデータを暗号化/復号化し、文字列で返します。

iv=(iv)

IV(Initialization Vector) を設定します。

iv_len -> Integer

必要な IV(Initialization Vector) の長さをバイト数で返します。

key=(key)

暗号鍵を設定します。

key_len -> Integer

暗号鍵の長さをバイト数で返します。

key_len=(length)

暗号鍵の長さを変更します。

name -> String

暗号化アルゴリズムの名前を文字列で返します。

padding=(padding)

パディングを設定します。

pkcs5_keyivgen(pass, salt=nil, num=2048, digest="md5") -> nil

pass と salt から鍵と IV を生成し、暗号オブジェクトに設定します。

random_iv -> String

IV を乱数で生成し、暗号オブジェクトに設定します。

random_key -> String

鍵を乱数で生成し、暗号オブジェクトに設定します。

reset -> self

内部状態をリセットします。

update(data) -> String

渡された文字列を暗号化もしくは復号化して文字列として返します。

継承したメソッド

! != __id__ __send__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined !~ <=> == === =~ _dump class clone define_singleton_method display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy inspect instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? send singleton_class singleton_method singleton_methods taint tainted? tap then to_a to_ary to_hash to_int to_io to_proc to_regexp to_s to_str trust untaint untrust untrusted? .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_ENGINE_VERSION ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE