跳到內容 跳到搜尋

實作簡單的 envelope 加密方法,在其中

  • 它會為每個加密操作產生一個隨機的資料加密金鑰。

  • 它會將產生的金鑰與加密的載荷一起儲存起來。它會使用 `active_record_encryption.primary_key` 認證中提供的 master 金鑰對此金鑰進行加密。

此提供者可使用多個 master 金鑰。它會使用最後一個 master 金鑰進行加密。

當 `config.active_record.encryption.store_key_references` 為 true 時,它也會儲存一個參考,指向用來加密資料加密金鑰的那個特定的 master 金鑰。如果不設定,它會嘗試所有設定好的 master 金鑰,找出正確的 master 金鑰,以回傳正確的解密金鑰。

方法
A
D
E

執行個體公開方法

active_primary_key()

# File activerecord/lib/active_record/encryption/envelope_encryption_key_provider.rb, line 31
def active_primary_key
  @active_primary_key ||= primary_key_provider.encryption_key
end

decryption_keys(encrypted_message)

# File activerecord/lib/active_record/encryption/envelope_encryption_key_provider.rb, line 26
def decryption_keys(encrypted_message)
  secret = decrypt_data_key(encrypted_message)
  secret ? [ActiveRecord::Encryption::Key.new(secret)] : []
end

encryption_key()

# File activerecord/lib/active_record/encryption/envelope_encryption_key_provider.rb, line 18
def encryption_key
  random_secret = generate_random_secret
  ActiveRecord::Encryption::Key.new(random_secret).tap do |key|
    key.public_tags.encrypted_data_key = encrypt_data_key(random_secret)
    key.public_tags.encrypted_data_key_id = active_primary_key.id if ActiveRecord::Encryption.config.store_key_references
  end
end