класс ActiveRecord::Encryption::Encryptor
Шифратор предоставляет API шифрования, которое ActiveRecord::Encryption::EncryptedAttributeType использует для шифрования и расшифрования значений атрибутов.
Он взаимодействует с KeyProvider для получения ключей и делегирует ActiveRecord::Encryption::Cipher фактический алгоритм шифрования.
Константы
- DECRYPT_ERRORS
- ENCODING_ERRORS
- ПОРОГ_ДЛЯ_ОБОСНОВАНИЯ_СЖАТИЯ
Открытые методы экземпляра
# File activerecord/lib/active_record/encryption/encryptor.rb, line 52
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 Расшифровывает clean_text и возвращает результат как чистый текст
Параметры
# File activerecord/lib/active_record/encryption/encryptor.rb, line 34
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 и возвращает зашифрованный результат
Внутренне он:
-
Создаёт новый
ActiveRecord::Encryption::Message -
Сжимает и шифрует
clean_textв качестве полезной нагрузки сообщения -
Сериализует его с помощью
ActiveRecord::Encryption.message_serializer(ActiveRecord::Encryption::SafeMarshalпо умолчанию) -
Кодирует результат с помощью
Base64
Параметры
# File activerecord/lib/active_record/encryption/encryptor.rb, line 62 def encrypted?(text) deserialize_message(text) true rescue Errors::Encoding, *DECRYPT_ERRORS false end
Возвращает значение true, если текст зашифрован, и false в противном случае
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.