класс ActiveSupport::MessageEncryptor
MessageEncryptor — простой способ шифрования значений, которые хранятся в ненадежном месте.
Текст шифра и вектор инициализации кодируются в base64 и возвращаются вам.
Это можно использовать в ситуациях, похожих на MessageVerifier, но где вы не хотите, чтобы пользователи могли определить значение полезной нагрузки.
salt = SecureRandom.random_bytes(64)
key = ActiveSupport::KeyGenerator.new('password').generate_key(salt) # => "\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 бит. Если вы используете секрет, введённый пользователем, вы можете сгенерировать подходящий ключ с помощью OpenSSL::Digest::SHA256.new(user_secret).digest или аналогичных методов.
Параметры:
Публичные методы экземпляра
# 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.