класс ActiveSupport::MessageEncryptor
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
Публичные методы класса
# File activesupport/lib/active_support/message_encryptor.rb, line 70 def self.key_len(cipher = DEFAULT_CIPHER) OpenSSL::Cipher.new(cipher).key_len end
Принимая шифр, возвращает длину ключа шифра, чтобы помочь сгенерировать ключ нужного размера.
# 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.
Публичные методы экземпляра
# 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.
# 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.