Linux — шифрование PHP не работает на сервере

Я пытаюсь сохранить зашифрованные куки в приложении PHP и реализовал 2 разные библиотеки шифрования, пытаясь заставить это работать.

Обе реализации при развертывании на сервере генерируют фатальные исключения при вызове моей функции шифрования. На моем локальном dev env, однако, обе реализации шифрования работают успешно.

Мой код реализации open_ssl (работает на localhost, не работает на удаленном сервере):

set_encrypted_cookie("foo","my_cookie_name");

function set_encrypted_cookie($msg,$name){
$key = '0123456qwerty'; // Key is stored externally but defined locally for debugging

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$encryptedStr = openssl_encrypt($msg, 'aes-256-cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);

setcookie($name,$encryptedStr,0,'/');
}

Любые мысли о том, почему сервер может не разрешить запуск функции openssl_encrypt ()?

1

Решение

openssl_encrypt() возвращает сырой двоичный файл, вы должны base64_encode() перед сохранением в печенье.

Прежде чем сделать это, пара вещей, которые вы можете сделать, чтобы улучшить свой протокол криптографии:

  1. использование MCRYPT_DEV_URANDOMне MCRYPT_RAND,
  2. Сохраните ваш IV с вашим зашифрованным текстом (до base64_encode()его), так что вы можете использовать тот же IV при расшифровке.
  3. Затем зашифровать MAC.

Последняя ссылка имеет две функции, setLessUnsafeCookie() а также getLessUnsafeCookie(), что вы можете использовать в качестве вставки в PHP 5.6.x.

Есть еще две вещи, чтобы сделать его безопасным для использования:

  1. Используйте HKDF, чтобы разделить ключ на ключ шифрования и ключ дешифрования.
  2. Используйте отступ PKCS7 на открытом тексте.

(Если вы хотите перейти на максимальную безопасность, вы можете использовать libsodium вместо openssl.) Также не используйте mcrypt.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]