跳至内容 跳至搜索

实现一种简单的信封加密方法,其中

  • 它为每次加密操作生成一个随机的数据加密密钥。

  • 它将生成的密钥与加密后的有效载荷一起存储。它使用在 active_record_encryption.primary_key 凭据中提供的主密钥加密此密钥。

此提供程序可以与多个主密钥一起使用。它将使用最后一个主密钥进行加密。

config.active_record.encryption.store_key_references 为 true 时,它还将存储对用于加密数据加密密钥的特定主密钥的引用。如果未设置,它将尝试所有已配置的主密钥以查找正确的密钥,以便返回正确的解密密钥。

方法
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