Spec-Zone.ru › Ruby on Rails 7.2

класс ActiveRecord::Encryption::Encryptor

Родитель:
Объект

Шифратор предоставляет API шифрования, которое ActiveRecord::Encryption::EncryptedAttributeType использует для шифрования и дешифрования значений атрибутов.

Он взаимодействует с KeyProvider для получения ключей и делегирует ActiveRecord::Encryption::Cipher фактический алгоритм шифрования.

Константы

DECRYPT_ERRORS
ENCODING_ERRORS
ПОРОГ_ДЛЯ_ОБОСНОВАНИЯ_СЖАТИЯ

Публичные методы класса

new(compress: true) Показать исходный код
# File activerecord/lib/active_record/encryption/encryptor.rb, line 19
def initialize(compress: true)
  @compress = compress
end

Параметры

  • :compress - Логическое значение, указывающее, следует ли сжимать записи перед шифрованием. По умолчанию true.

Публичные методы экземпляров

binary?() Показать исходный код
# File activerecord/lib/active_record/encryption/encryptor.rb, line 77
def binary?
  serializer.binary?
end
decrypt(encrypted_text, key_provider: default_key_provider, cipher_options: {}) Показать исходный код
# File activerecord/lib/active_record/encryption/encryptor.rb, line 60
def decrypt(encrypted_text, key_provider: default_key_provider, cipher_options: {})
  message = deserialize_message(encrypted_text)
  keys = key_provider.decryption_keys(message)
  raise Errors::Decryption unless keys.present?
  uncompress_if_needed(cipher.decrypt(message, key: keys.collect(&:secret), **cipher_options), message.headers.compressed)
rescue *(ENCODING_ERRORS + DECRYPT_ERRORS)
  raise Errors::Decryption
end

Дешифрует encrypted_text и возвращает результат как чистый текст

Параметры

:key_provider

Провайдер Key, который следует использовать для операции шифрования. По умолчанию используется ActiveRecord::Encryption.key_provider.

:cipher_options

Параметры, специфичные для шифра, которые будут переданы Cipher, настроенному в ActiveRecord::Encryption.cipher

encrypt(clear_text, key_provider: default_key_provider, cipher_options: {}) Показать исходный код
# File activerecord/lib/active_record/encryption/encryptor.rb, line 42
def encrypt(clear_text, key_provider: default_key_provider, cipher_options: {})
  clear_text = force_encoding_if_needed(clear_text) if cipher_options[:deterministic]

  validate_payload_type(clear_text)
  serialize_message build_encrypted_message(clear_text, key_provider: key_provider, cipher_options: cipher_options)
end

Шифрует clean_text и возвращает зашифрованный результат

Внутренне он:

  1. Создаёт новый ActiveRecord::Encryption::Message

  2. Сжимает и шифрует clean_text в качестве полезной нагрузки сообщения

  3. Сериализует его с помощью ActiveRecord::Encryption.message_serializer (ActiveRecord::Encryption::SafeMarshal по умолчанию)

  4. Кодирует результат с использованием Base 64

Параметры

:key_provider

Провайдер Key для операции шифрования. По умолчанию используется ActiveRecord::Encryption.key_provider.

:cipher_options

Параметры, специфичные для шифра, которые будут переданы Cipher, настроенному в ActiveRecord::Encryption.cipher

encrypted?(text) Показать исходный код
# File activerecord/lib/active_record/encryption/encryptor.rb, line 70
def encrypted?(text)
  deserialize_message(text)
  true
rescue Errors::Encoding, *DECRYPT_ERRORS
  false
end

Возвращает значение true, если текст зашифрован, иначе false

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API