class CryptoCipher::CryptoAES256

Attributes

cipher[RW]
private_cipher[RW]
private_key[RW]
public_key[RW]
random_iv[RW]
random_key[RW]

Public Class Methods

new(public_key_file, private_key_file, private_cipher_file = './config/private_cipher.key') click to toggle source
# File lib/cipher/crypto_cipher_aes.rb, line 15
def initialize(public_key_file, private_key_file,  private_cipher_file = './config/private_cipher.key')
    
    @cipher = OpenSSL::Cipher.new('aes256')

    @private_cipher = private_cipher_file
       
    @public_key  = OpenSSL::PKey::RSA.new(File.read(public_key_file))
    @private_key = OpenSSL::PKey::RSA.new(File.read(private_key_file))
    
    if exist_rsa_keys
        puts 'create values'
        @cipher.encrypt

        @random_key = @cipher.random_key
        @random_iv  = @cipher.random_iv

        create_key_iv @random_key, @random_iv 
    else 
        rsa = get_key_iv
        @random_key = rsa[:random_key]
        @random_iv  = rsa[:random_iv]
    end
end

Public Instance Methods

decrypt(encrypted_data) click to toggle source
# File lib/cipher/crypto_cipher_aes.rb, line 100
def decrypt(encrypted_data)
    @cipher.decrypt

    encrypted_key = @public_key.public_encrypt(@random_key)
    encrypted_iv = @public_key.public_encrypt(@random_iv)

    @cipher.key = @private_key.private_decrypt(encrypted_key)
    @cipher.iv = @private_key.private_decrypt(encrypted_iv)

    decrypted_data = @cipher.update(Base64.decode64(encrypted_data)) + cipher.final
    return decrypted_data
end
encrypt(plain_data) click to toggle source
# File lib/cipher/crypto_cipher_aes.rb, line 89
def encrypt(plain_data)
    @cipher.encrypt
    
    @cipher.key = @random_key
    @cipher.iv  = @random_iv

    encrypted_data = @cipher.update(plain_data) + cipher.final
    return Base64.strict_encode64(encrypted_data)
end

Private Instance Methods

create_key_iv(random_key, random_iv) click to toggle source
# File lib/cipher/crypto_cipher_aes.rb, line 73
def create_key_iv(random_key, random_iv)
  begin
    if exist_rsa_keys
      rsa = File.new(@private_cipher,'w:UTF-8')
          rsa.puts Base64.strict_encode64(random_key)
          rsa.puts Base64.strict_encode64(random_iv)
      rsa.close
    end
    return true
  rescue
      return false
  end
end
exist_rsa_keys() click to toggle source
# File lib/cipher/crypto_cipher_aes.rb, line 49
def exist_rsa_keys
  !File.exist? @private_cipher
end
get_key_iv() click to toggle source
# File lib/cipher/crypto_cipher_aes.rb, line 53
def get_key_iv
  begin
    line_num = 0
    rsa_keys = {random_key:  nil, random_iv: nil}
    text = File.open(@private_cipher).read
    text.each_line do |line|
      if line_num ==0
          rsa_keys[:random_key] = Base64.decode64(line)
          line_num += 1
      elsif line_num == 1
          rsa_keys[:random_iv] = Base64.decode64(line)
          line_num += 1
      end
    end
    return rsa_keys
  rescue
    return nil
  end
end