класс 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 88 def self.key_len(cipher = DEFAULT_CIPHER) OpenSSL::Cipher.new(cipher).key_len end
Принимая шифр, возвращает длину ключа шифра, чтобы помочь сгенерировать ключ нужного размера.
# File activesupport/lib/active_support/message_encryptor.rb, line 64 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] || DEFAULT_CIPHER @digest = options[:digest] || "SHA1" unless aead_mode? @verifier = resolve_verifier @serializer = options[:serializer] || Marshal end
Инициализирует новый MessageEncryptor. secret должен быть не меньше размера ключа шифра. Для стандартного шифра 'aes-256-cbc' это 256 бит. Если вы используете введённый пользователем секрет, вы можете сгенерировать подходящий ключ, используя ActiveSupport::KeyGenerator или аналогичную функцию вывода ключа.
Первый дополнительный параметр используется в качестве ключа подписи для MessageVerifier. Это позволяет вам указывать ключи для шифрования и подписи данных.
ActiveSupport::MessageEncryptor.new('secret', 'signature_secret')
Параметры:
-
:cipher— Шифр для использования. Может быть любым шифром, возвращаемымOpenSSL::Cipher.ciphers. По умолчанию 'aes-256-cbc'. -
:digest— Строка хэш-функции для использования при подписи. По умолчаниюSHA1. Игнорируется при использовании шифра AEAD, такого как 'aes-256-gcm'. -
:serializer— Сериализатор объекта для использования. По умолчаниюMarshal.
Общедоступные методы экземпляра
# File activesupport/lib/active_support/message_encryptor.rb, line 83 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 77 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.