跳至内容 跳至搜索

一个 KeyProvider 提供密钥

  • 一个加密密钥

  • 一个可能的解密密钥列表。提供多个解密密钥支持密钥轮换方案,其中添加新密钥,但旧密钥需要继续工作

方法
D
E
N

类公共方法

new(keys)

# File activerecord/lib/active_record/encryption/key_provider.rb, line 11
def initialize(keys)
  @keys = Array(keys)
end

实例公共方法

decryption_keys(encrypted_message)

返回解密密钥列表

当消息包含对加密密钥的引用时,它将返回一个包含该密钥的数组。否则,它将返回密钥列表。

# File activerecord/lib/active_record/encryption/key_provider.rb, line 32
def decryption_keys(encrypted_message)
  if encrypted_message.headers.encrypted_data_key_id
    keys_grouped_by_id[encrypted_message.headers.encrypted_data_key_id]
  else
    @keys
  end
end

encryption_key()

返回列表中的最后一个密钥作为执行加密的活动密钥

ActiveRecord::Encryption.config.store_key_references 为 true 时,密钥将包含一个引用密钥本身的公共标签。该密钥将存储在加密消息的公共头中

# File activerecord/lib/active_record/encryption/key_provider.rb, line 20
def encryption_key
  @encryption_key ||= @keys.last.tap do |key|
    key.public_tags.encrypted_data_key_id = key.id if ActiveRecord::Encryption.config.store_key_references
  end

  @encryption_key
end