Class: StoreAgent::DataEncoder::OpensslAes256CbcEncoder
- Inherits:
-
StoreAgent::DataEncoder
- Object
- StoreAgent::DataEncoder
- StoreAgent::DataEncoder::OpensslAes256CbcEncoder
- 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
- #decode(encrypted_data, password: @password, **_) ⇒ Object
- #encode(data, password: @password, **_) ⇒ Object
-
#initialize ⇒ OpensslAes256CbcEncoder
constructor
:nodoc:.
Constructor Details
#initialize ⇒ OpensslAes256CbcEncoder
: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 |