Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::Cipher::Cipherクラス
class OpenSSL::Cipher::Cipher
クラスの継承リスト: OpenSSL::Cipher::Cipher < Object < Kernel < BasicObject
Abstract
対称鍵暗号のために抽象化されたインターフェースを提供するクラスです。
以下のクラスが実装されています。
- OpenSSL::Cipher::BF
- OpenSSL::Cipher::CAST5
- OpenSSL::Cipher::DES
- OpenSSL::Cipher::IDEA
- OpenSSL::Cipher::RC2
- OpenSSL::Cipher::RC4
- OpenSSL::Cipher::RC5
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 により暗号化か復号化かが決まります。