rubyを使ってファイルの暗号化と復号を行う
=begin ファイルの暗号化と復号 =end require 'openssl' require './create_key' class File_Crypto def initialize(key = nil, iv = nil, alg = "aes-128-cbc") @cip = OpenSSL::Cipher.new(alg) @key = key @iv = iv end def file_encrypt(filepath) if @key != nil && @iv != nil @cip.encrypt #暗号化モード @cip.key = @key #鍵セット @cip.iv = @iv #イニシャライズベクタセット @cip.padding = 1 #パディング有効 enc_data = "" File.open(filepath){|f| while data = f.read(1024) enc_data << @cip.update(data) end } enc_data << @cip.final return enc_data else return nil end end def file_decrypt(filepath) if @key != nil && @iv != nil @cip.decrypt #復号モード @cip.key = @key #鍵セット @cip.iv = @iv #イニシャライズベクタセット @cip.padding = 1 #パディング有効 dec_data = "" File.open(filepath){|f| while data = f.read(1024) dec_data << @cip.update(data) end } dec_data << @cip.final return dec_data else return nil end end end #このプログラムが単体で実行される場合のみ以下を実行 if __FILE__ == $0 filepath = ARGV[0] ck = Create_key.new("aes-128-cbc") key = ck.key_gen iv = ck.iv_gen c = File_Crypto.new(key, iv, "aes-128-cbc") cipherdata = c.file_encrypt(filepath) if cipherdata != nil File.binwrite("Enc1", cipherdata); b = c.file_decrypt("./Enc1") File.write("hoge.txt", b); else print "error\n" end end
実行結果
ruby file_crypto.rb megane.txt
実行結果もなにもこれじゃわからないかと思いますが、これは"megane.txt"をよみこんで暗号化ファイル"Enc1"を生成し、すぐさまそれを読み込んで"hoge.txt"として復号しています。ファイルを読み込みながらどんどん暗号化しています。