Spec-Zone.ru › Ruby on Rails 8.0

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

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

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

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

Константы

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

Атрибуты

compressor[R]

Сжиматель, используемый для сжатия полезной нагрузки

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

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

Параметры

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

  • :compressor - Сжиматель для использования.

    1. Если compressor указан, он будет использован.

    2. В противном случае будет использован ActiveRecord::Encryption.config.compressor, значение которого по умолчанию Zlib.

    Если вы хотите использовать пользовательский сжиматель, он должен отвечать на deflate и inflate.

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

binary?() Показать исходный код
# File activerecord/lib/active_record/encryption/encryptor.rb, line 84
def binary?
  serializer.binary?
end
decrypt(encrypted_text, key_provider: default_key_provider, cipher_options: {}) Показать исходный код
# File activerecord/lib/active_record/encryption/encryptor.rb, line 67
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 49
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 77
def encrypted?(text)
  deserialize_message(text)
  true
rescue Errors::Encoding, *DECRYPT_ERRORS
  false
end

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

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

Spec-Zone.ru

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