Spec-Zone.ru › Ruby on Rails 5.0

класс ActiveSupport::MessageEncryptor

Родитель:
Object

MessageEncryptor — простой способ шифрования значений, которые хранятся в ненадежном месте.

Зашифрованный текст и вектор инициализации кодируются в base64 и возвращаются.

Это можно использовать в ситуациях, похожих на MessageVerifier, но где вы не хотите, чтобы пользователи могли определить значение полезной нагрузки.

salt  = SecureRandom.random_bytes(64)
key   = ActiveSupport::KeyGenerator.new('password').generate_key(salt, 32) # => "\x89\xE0\x156\xAC..."
crypt = ActiveSupport::MessageEncryptor.new(key)                           # => #<ActiveSupport::MessageEncryptor ...>
encrypted_data = crypt.encrypt_and_sign('my secret data')                  # => "NlFBTTMwOUV5UlA1QlNEN2xkY2d6eThYWWh..."
crypt.decrypt_and_verify(encrypted_data)                                   # => "my secret data"

Константы

DEFAULT_CIPHER
OpenSSLCipherError

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

key_len(cipher = DEFAULT_CIPHER) Показать исходный код
# File activesupport/lib/active_support/message_encryptor.rb, line 70
def self.key_len(cipher = DEFAULT_CIPHER)
  OpenSSL::Cipher.new(cipher).key_len
end

Принимая шифр, возвращает длину ключа шифра, чтобы помочь сгенерировать ключ нужного размера.

new(secret, *signature_key_or_options) Показать исходный код
# File activesupport/lib/active_support/message_encryptor.rb, line 47
def initialize(secret, *signature_key_or_options)
  options = signature_key_or_options.extract_options!
  sign_secret = signature_key_or_options.first
  @secret = secret
  @sign_secret = sign_secret
  @cipher = options[:cipher] || 'aes-256-cbc'
  @verifier = MessageVerifier.new(@sign_secret || @secret, digest: options[:digest] || 'SHA1', serializer: NullSerializer)
  @serializer = options[:serializer] || Marshal
end

Инициализирует новый MessageEncryptor. secret должен быть не короче размера ключа шифра. Для шифра по умолчанию 'aes-256-cbc' это 256 бит. Если вы используете секрет, введенный пользователем, вы можете сгенерировать подходящий ключ, используя ActiveSupport::KeyGenerator или аналогичную функцию вывода ключа.

Параметры:

  • :cipher — Шифр для использования. Может быть любым шифром, возвращаемым OpenSSL::Cipher.ciphers. Значение по умолчанию — 'aes-256-cbc'.

  • :digest — Строка дайджеста для использования при подписи. Значение по умолчанию — SHA1.

  • :serializer — Объект сериализатор для использования. Значение по умолчанию — Marshal.

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

decrypt_and_verify(value) Показать исходный код
# File activesupport/lib/active_support/message_encryptor.rb, line 65
def decrypt_and_verify(value)
  _decrypt(verifier.verify(value))
end

Расшифровывает и проверяет сообщение. Нам нужно проверить сообщение, чтобы избежать атак с подменой данных. См.: www.limited-entropy.com/padding-oracle-attacks.

encrypt_and_sign(value) Показать исходный код
# File activesupport/lib/active_support/message_encryptor.rb, line 59
def encrypt_and_sign(value)
  verifier.generate(_encrypt(value))
end

Шифрует и подписывает сообщение. Нам нужно подписать сообщение, чтобы избежать атак с подменой данных. См.: www.limited-entropy.com/padding-oracle-attacks.

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

Spec-Zone.ru

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