2009年1月26日月曜日

Rubyでファイルの暗号化(RSA)

rubyにて、opensslライブラリを用いて、文字列の暗号化。
公開鍵で暗号化して、秘密鍵で複合化。

webからはデータの入力だけにして、確認は人手で別途実施する場合などに使えるかと思います。

個人的には、南京錠で言うところの、錠(ジョウ)が公開鍵、
鍵(カギ)が秘密鍵だと理解しているので、それも追加しながらコメント

require 'openssl'
include OpenSSL::PKey

rsa = RSA.generate(2048)
これで、RSAを作成出来た。

rsa.public? # => true
rsa.private? #=> true

rsaには、公開鍵(錠)と暗号鍵(鍵)が含まれている。

公開鍵(錠)は、そのままテキストで取り出し。
public_key = rsa.public_key.to_s

暗号鍵(鍵)は、AESで暗号化し(パスワード付け)て取りだし。
private_key = rsa.export(OpenSSL::Cipher::Cipher.new('aes256'),
'password')

さて、ここで特定の文字列を暗号化してみる。対象はこれね。
target = 'hogehoge'

まずは、public_keyから公開鍵(錠)のrsaオブジェクト作成
pub = RSA.new(public_key)
pub.public? #=> true
pub.private? #=> fale

さあ、暗号化。
enc_target = pub.public_encrypt(target)
これで、targetを暗号化出来ました。
たしかに、’hogehoge’という文字列はみるかげもありません。

ちなみに、enc_targetはStringのようです。
enc_targe.class #=> string

では、次に複合化します。先程とは逆に秘密鍵(鍵)のrsaオブジェクト作成
private = RSA.new(private_key,'password')
こちらは、錠と鍵の両方を持っているようです。
private.public? #=> true
private.private? #=> ture

private.private_decrypt(enc_target) #=> 'hogehoge'

おおお、複合化出来ました。

0 件のコメント: