Я пытаюсь сохранить зашифрованные куки в приложении 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 ()?
openssl_encrypt()
возвращает сырой двоичный файл, вы должны base64_encode()
перед сохранением в печенье.
Прежде чем сделать это, пара вещей, которые вы можете сделать, чтобы улучшить свой протокол криптографии:
MCRYPT_DEV_URANDOM
не MCRYPT_RAND
,base64_encode()
его), так что вы можете использовать тот же IV при расшифровке.Последняя ссылка имеет две функции, setLessUnsafeCookie()
а также getLessUnsafeCookie()
, что вы можете использовать в качестве вставки в PHP 5.6.x.
Есть еще две вещи, чтобы сделать его безопасным для использования:
(Если вы хотите перейти на максимальную безопасность, вы можете использовать libsodium вместо openssl.) Также не используйте mcrypt.
Других решений пока нет …