實作簡單的 envelope 加密方法,在其中
-
它會為每個加密操作產生一個隨機的資料加密金鑰。
-
它會將產生的金鑰與加密的載荷一起儲存起來。它會使用 `active_record_encryption.primary_key` 認證中提供的 master 金鑰對此金鑰進行加密。
此提供者可使用多個 master 金鑰。它會使用最後一個 master 金鑰進行加密。
當 `config.active_record.encryption.store_key_references` 為 true 時,它也會儲存一個參考,指向用來加密資料加密金鑰的那個特定的 master 金鑰。如果不設定,它會嘗試所有設定好的 master 金鑰,找出正確的 master 金鑰,以回傳正確的解密金鑰。
方法
執行個體公開方法
active_primary_key() 連結
來源:顯示 | 在 GitHub 上
# 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) 連結
來源:顯示 | 在 GitHub 上
# 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() 連結
來源:顯示 | 在 GitHub 上
# 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