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

class OpenSSL::Cipher::Cipher

クラスの継承リスト: OpenSSL::Cipher::Cipher < Object < Kernel < BasicObject

Abstract

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

以下のクラスが実装されています。

AES も OpenSSL::Cipher::Cipher.new('aes256') などとすれば利用可能です。

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

使用例

require 'openssl'

p a123 = "0123456789"
pass = "hogehoge"
enc = OpenSSL::Cipher::DES.new
enc.encrypt
enc.pkcs5_keyivgen(pass)
p a = enc.update(a123)
p b = enc.final
s = a + b

dec = OpenSSL::Cipher::DES.new
dec.decrypt
dec.pkcs5_keyivgen(pass)
p a = dec.update(s)
p b = dec.final
p a + b #=> "0123456789"

特異メソッド

new(name)
new

対称鍵暗号アルゴリズムの名前 name を与えると暗号オブジェクトを生成します。 利用できるアルゴリズムはシステムにインストールされている openssl に依存します。

$ openssl
OpenSSL> version
OpenSSL 0.9.7d 17 Mar 2004
OpenSSL> enc help
(略)
Cipher Types
-aes-128-cbc               -aes-128-cfb               -aes-128-ecb
-aes-128-ofb               -aes-192-cbc               -aes-192-cfb
-aes-192-ecb               -aes-192-ofb               -aes-256-cbc
-aes-256-cfb               -aes-256-ecb               -aes-256-ofb
-aes128                    -aes192                    -aes256
-bf                        -bf-cbc                    -bf-cfb
-bf-ecb                    -bf-ofb                    -blowfish
-cast                      -cast-cbc                  -cast5-cbc
-cast5-cfb                 -cast5-ecb                 -cast5-ofb
-des                       -des-cbc                   -des-cfb
-des-ecb                   -des-ede                   -des-ede-cbc
-des-ede-cfb               -des-ede-ofb               -des-ede3
-des-ede3-cbc              -des-ede3-cfb              -des-ede3-ofb
-des-ofb                   -des3                      -desx
-desx-cbc                  -idea                      -idea-cbc
-idea-cfb                  -idea-ecb                  -idea-ofb
-rc2                       -rc2-40-cbc                -rc2-64-cbc
-rc2-cbc                   -rc2-cfb                   -rc2-ecb
-rc2-ofb                   -rc4                       -rc4-40
-rc5                       -rc5-cbc                   -rc5-cfb
-rc5-ecb                   -rc5-ofb

さまざまな方式がありますが、2006年現在 aes256 (aes-256-cbc) を用いるのが安心でしょう。

参考: [[unknown:UNIXの部屋 検索結果: openssl|URL:http://x68000.q-e-d.net/~68user/unix/pickup?openssl]]

require 'openssl'
include OpenSSL::Cipher

# Triple DES
c1 = Cipher.new("DES-EDE3-CBC")
c2 = DES.new(:EDE3, "CBC")
pass = "open sesame!"
data = "Hello world!"
c1.pkcs5_keyivgen(pass)
s1 = c1.encrypt.update(data) + c1.final
c2.pkcs5_keyivgen(pass)
s2 = c2.decrypt.update(s1) + c2.final
p(data == s2) #=> true

c1 = Cipher.new("AES256")
c2 = Cipher.new("AES-256-CBC")
pass = "open sesame!"
data = "Hello world!"
c1.pkcs5_keyivgen(pass)
s1 = c1.encrypt.update(data) + c1.final
c2.pkcs5_keyivgen(pass)
s2 = c2.decrypt.update(s1) + c2.final
p(data == s2) #=> true

インスタンスメソッド

block_size

ブロックのサイズを返します。

decrypt(key, iv)

復号化の準備をします。iv は initialization vector のことで、必要なら使用されます。 この API に引数を渡すことは推奨されません。パスワードから鍵を生成する場合は、 pkcs5_keyivgen を使用してください。

encrypt(key, iv)

暗号化の準備をします。iv は initialization vector のことで、必要なら使用されます。 この API に引数を渡すことは推奨されません。パスワードから鍵を生成する場合は、 pkcs5_keyivgen を使用してください。

final

ブロックに残っているデータを暗号化あるいは復号化します。final を呼んだあとでは update を呼んではいけません。

iv=(iv)

初期ベクトル (initialization vector)。

iv_len

初期ベクトルの長さ。

key=(key)

暗号鍵を設定します。 なお、ここでいう「暗号鍵」は AES のアルゴリズムに渡される鍵であって、「パスワード」ではありません。

key_len
key_len=(length)

暗号鍵の長さ。

padding=(padding)

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

pkcs5_keyivgen(pass, salt=nil, num=2048, digest=OpenSSL::Digest::MD5.new())

pass から key と iv を生成し key= と iv= に設定します。 salt は 8-octet string でないといけません。nil を返します。

random_iv
random_key
reset

暗号、暗号鍵、暗号化復号化フラグを共にリセットします。

update(data)

与えられた文字列を暗号化あるいは復号化して文字列として返します。直前に呼ばれた encrypt あるいは decrypt により暗号化か復号化かが決まります。

Methods

Classes