対称鍵暗号のために抽象化されたインターフェースを提供するクラス。
以下が実装されているクラス。
AES も OpenSSL::Cipher::Cipher.new('aes256') などとすれば利用可能です。
ruby 1.8.3 feature: 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"
Cipher.new(name)
Cipher.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) を用いるのが安心でしょう。
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
reset
暗号、暗号鍵、暗号化復号化フラグを共にリセットする。
encrypt(key, iv)
暗号化の準備をする。iv は initialization vector、必要なら使用される。 このAPIに引数を渡すのは推奨しない。パスワードから鍵を生成する場合は、 pkcs5_keyivgenを使用すること。
decrypt(key, iv)
復号化の準備をする。iv は initialization vector、必要なら使用される。 このAPIに引数を渡すのは推奨しない。パスワードから鍵を生成する場合は、 pkcs5_keyivgenを使用すること。
update(data)
与えられた文字列を暗号化あるいは復号化して文字列として返す。直前に呼ばれた encrypt あるいは decrypt により暗号化か復号化かが決まる。
final()
ブロックに残っているデータを暗号化あるいは復号化する。final() を呼んだあとでは update を呼んではいけない。
key=
暗号鍵を設定する。 なお、ここでいう「暗号鍵」は AES のアルゴリズムに渡される鍵であり、「パスワード」ではない。
key_len
key_len=
暗号鍵の長さ。
iv=
初期ベクトル (initialization vector)。
iv_len
初期ベクトルの長さ。
block_size
ブロックのサイズを返す。
padding=
パディングを設定する。
pkcs5_keyivgen(pass, salt=nil, num=2048, digest=OpenSSL::Digest::MD5.new())
pass から key と iv を生成し key= と iv= に設定する。 salt は 8-octet string でないといけない。nil を返す。
OpenSSL::Cipher::CipherError