class AES256
Public Class Methods
decrypt(crypted, passphrase)
click to toggle source
# File lib/aes-everywhere.rb, line 43 def self.decrypt(crypted, passphrase) data = Base64.strict_decode64(crypted) salted = data[0..7] if salted != "Salted__" raise "Invalid data" end salt = data[8..15] crypted = data[16..-1] cipher = OpenSSL::Cipher::AES256.new(:CBC) cipher.decrypt cipher.key, cipher.iv = self.derive_key_and_iv(passphrase, salt) derypted = cipher.update(crypted) + cipher.final derypted.force_encoding("utf-8") end
encrypt(input, passphrase)
click to toggle source
# File lib/aes-everywhere.rb, line 34 def self.encrypt(input, passphrase) salt = OpenSSL::Random.random_bytes(8) cipher = OpenSSL::Cipher::AES256.new(:CBC) cipher.encrypt cipher.key, cipher.iv = self.derive_key_and_iv(passphrase, salt) crypted = cipher.update(input) + cipher.final Base64.strict_encode64("Salted__" + salt + crypted) end
Private Class Methods
derive_key_and_iv(passphrase, salt)
click to toggle source
# File lib/aes-everywhere.rb, line 60 def self.derive_key_and_iv(passphrase, salt) dx = di = "" enc_pass = passphrase.bytes.pack('c*') for _ in 1...4 di = Digest::MD5.digest(di + enc_pass + salt) dx += di end return dx[0..31], dx[32..47] end