Download the PHP package phpsoftbox/encryptor without Composer
On this page you can find all versions of the php package phpsoftbox/encryptor. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download phpsoftbox/encryptor
More information about phpsoftbox/encryptor
Files in phpsoftbox/encryptor
Package encryptor
Short Description Encryptor component for the PhpSoftBox framework
License MIT
Informations about the package encryptor
PhpSoftBox Encryptor
Компонент для обратимого шифрования и расшифровки строк с поддержкой расширяемых драйверов. Подходит для случаев, когда нужен "хеш, который можно расшифровать" (фактически это шифртекст).
Установка
Основные сущности
Encryptor— фасад и точка входа. РеализуетEncryptorInterfaceиEncryptedValueResolverInterface.DriverInterface— контракт драйвера шифрования.KeyProviderInterface— источник текущего и предыдущих ключей.EncryptedValue— Value Object с шифртекстом, опциональными ключом и именем драйвера.
Быстрый старт
Ключи
- Ключ для шифрования — не короче 32 байт (
Encryptor::MIN_KEY_LENGTH). Генерируйте его командойencryptor:key:generate(32 случайных байта в base64); строки видаsecret-keyотклоняютсяInvalidArgumentException. - Для расшифровки подходит любой непустой ключ: данные, зашифрованные прежним коротким ключом, читаются, пока он
указан в
previousKeys. Новые данные шифруются только текущим длинным ключом. - Можно передавать ключ явно в
encrypt()/decrypt(), или использоватьKeyProviderInterface. - Если
KeyProviderInterfaceне задан, можно передатьdefaultKeyвEncryptor.
Использование ключа из провайдера:
Драйверы
По умолчанию используется OpenSslDriver (aes-256-gcm). Требуется расширение ext-openssl.
Формат шифртекста OpenSslDriver:
- ключ AES выводится из переданного ключа через HKDF-SHA256;
- тег — ровно 16 байт, IV — 12 байт; шифртекст с другой длиной отклоняется (короткий тег GCM подбирается перебором);
- версия формата и связанные данные входят в аутентификацию.
Шифртекст без префикса v1. (base64(iv).base64(tag).base64(data), ключ — SHA-256 от переданного) создавался до
версии 1.0. Он по-прежнему расшифровывается, но только без связанных данных; новые значения в нём не шифруются.
Связанные данные
Последний необязательный аргумент encrypt(), decrypt(), encryptWithCurrentKey() и decryptWithAnyKey() — данные,
к которым привязывается шифртекст. Они не шифруются, но без них значение не расшифровать. Так CookieMiddleware
привязывает значение к имени cookie: зашифрованное значение одной cookie нельзя подставить в другую.
Использование другого драйвера
Регистрация кастомного драйвера
EncryptedValue
EncryptedValue хранит шифртекст и (опционально) ключ/драйвер. Это удобно для хранения в конфиге.
Если нужен другой ключ или драйвер:
Если ключ не указан в EncryptedValue, используется KeyProviderInterface (если задан),
иначе — defaultKey у Encryptor.
Ротация ключей
Для постепенной смены ключей используется KeyProviderInterface.
Текущий ключ применяется для шифрования, а при расшифровке пробуются сначала текущий,
затем предыдущие ключи по порядку.
DI и конфигурация
KeyProviderInterface удобно собирать в composition root из значений APP_KEY
и списка previousKeys (например, config.app_key и config.previous_keys),
а затем передавать в Encryptor через DI-контейнер.
Пример для PHP-DI
Интеграция с Config
Config умеет автоматически расшифровывать EncryptedValue, если передан
EncryptedValueResolverInterface (например, Encryptor).
Для ConfigFactory: