Class: StoreAgent::DataEncoder::OpensslAes256CbcEncoder

Inherits:
StoreAgent::DataEncoder show all
Defined in:
lib/store_agent/data_encoder/openssl_aes_256_cbc_encoder.rb

Overview

データを OpenSSL AES-256-CBC で暗号化して保存するためのエンコーダ

StoreAgent.configure do |c|
  c.storage_data_encoders = [StoreAgent::DataEncoder::OpensslAes256CbcEncoder]
end

暗号化にパスワードを使用する場合、環境変数で指定する

$ env STORE_AGENT_DATA_ENCODER_PASSWORD=password ruby-command

指定が無い場合には空文字列をパスワードとして使用する

Instance Method Summary collapse

Constructor Details

#initializeOpensslAes256CbcEncoder

:nodoc:



27
28
29
30
# File 'lib/store_agent/data_encoder/openssl_aes_256_cbc_encoder.rb', line 27

def initialize # :nodoc:
  @password = ENV["STORE_AGENT_DATA_ENCODER_PASSWORD"] || ""
  @encryptor = OpenSSL::Cipher::AES.new(256, "CBC")
end

Instance Method Details

#decode(encrypted_data, password: @password, **_) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/store_agent/data_encoder/openssl_aes_256_cbc_encoder.rb', line 41

def decode(encrypted_data, password: @password, **_)
  super do
    @encryptor.decrypt
    encrypted_data.force_encoding("ASCII-8BIT")
    salt = encrypted_data[8..15]
    data = encrypted_data[16..-1]
    crypt(data: data, password: password, salt: salt)
  end
end

#encode(data, password: @password, **_) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/store_agent/data_encoder/openssl_aes_256_cbc_encoder.rb', line 32

def encode(data, password: @password, **_)
  super do
    @encryptor.encrypt
    salt = OpenSSL::Random.random_bytes(8)
    encrypted_data = crypt(data: data, password: password, salt: salt)
    "Salted__#{salt}#{encrypted_data}"
  end
end