トップ «前の日記(2013年01月07日(Mon)) 最新 次の日記(2013年01月24日(Thu))» 編集 RSS feed

shinoのときどき日記


2013年01月21日(Mon)

ruby1.9.3で暗号化と復号化に挑戦してみた。

rjtest.rb 結果:エラー

http://d.hatena.ne.jp/rubyco/20081201/crypt からコードを移して実行してみた。

実行結果

%ruby rjtest.rb
plain.txt is created.
Enter password to encrypt:
$HOME/local/lib/ruby/gem/gems/crypt-1.1.4/crypt/stringxor.rb:9:in `^': undefined method `length' for 104:Fixnum (NoMethodError)

よくわからないけれど、どこかにcryptはもう古いよって書いてあった。サンプルのパスワードを手入力で受け付ける部分は真似したいと思った。

http://www.ruby-lang.orgのサンプル三種類

http://www.ruby-lang.org/ja/old-man/html/OpenSSL_Cipher_Cipher.html

サンプル1
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"

動いた。

サンプル2
require 'openssl'

# Triple DES
c1 = OpenSSL::Cipher::Cipher.new("DES-EDE3-CBC")
c2 = OpenSSL::Cipher::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

動いた。incdlue OpenSSL::Cipherが効かなかったので、CipherやDESの前に付けたら動いた。上のコード改変している。次のコードも同じく改変した。

サンプル3
require 'openssl'

c1 = OpenSSL::Cipher::Cipher.new("AES256")
c2 = OpenSSL::Cipher::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

しかし、結果はエラーでdecryptできなかった。最後のc2.finalでこけているらしい。

実行結果

%ruby test2.rb
test2.rb:13:in `final': bad decrypt (OpenSSL::Cipher::CipherError)
        from test2.rb:13:in `<main>'

ウノウラボさんのサンプル

http://unoh.github.com/2007/05/24/ruby.html

2007年のもの。1.9.3では、途中一行を変更したら動いた。

変更前

((enc.update(aaa) + enc.final).unpack("H*")).to_s

変更後

((enc.update(aaa) + enc.final).unpack("H*"))[0]
Tags: ruby

トップ «前の日記(2013年01月07日(Mon)) 最新 次の日記(2013年01月24日(Thu))» 編集 RSS feed
2000|03|
2007|01|03|04|05|06|10|12|
2008|01|02|03|04|05|06|07|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|11|12|
2015|01|02|04|05|09|10|12|
2016|01|03|04|05|08|
2017|01|02|04|05|06|07|08|09|10|
2018|05|06|
2019|08|12|
2020|01|03|04|