kind=defined
names=new
visibility=public

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

