Я разрабатываю приложение, которое позволяет конечным пользователям принимать викторины из своих браузеров. Часть требования заключается в том, что когда время начала викторины вокруг, вопрос должен отображаться каждому участнику одновременно. Это делает вопросы обслуживания конечными пользователями с сервера менее разумными, потому что это приведет к внезапному всплеску запроса, поэтому я намереваюсь отвечать на них, как только они подключатся, и менее чем за 2 часа до начала викторины. Проблема в том, что, поскольку это соревнование, вопросы не следует рассматривать перед началом работы, поэтому необходимо зашифровать его.Проблемы с совместимостью с pidcrypt и openssl_encrypt
Я решил зашифровать в два этапа - первый этап шифрования с использованием асимметричного шифрования RSA для обмена ключами, которые я успешно выполнил. Этот ключ будет использоваться для шифрования любых других данных, которые будут отправляться между сервером и клиентом.
Проблема теперь в симметричной части шифрования. Я пытаюсь использовать метод openssl_encrypt для шифрования на стороне сервера и пытается расшифровать с помощью pidcrypt (библиотека шифрования/дешифрования javascript) на стороне клиента. Оказывается, pidcrypt требует, чтобы ваш iv (вектор инициализации) составлял восемь байтов, однако openssl_encrypt с использованием режима AES-256-CBC не позволяет использовать восемь байтов, поэтому он постоянно настаивает на 16 байтах. Я сделал много перестановок и экспериментов без везения. В документации pidcrypt было указано, что она совместима с opensl, поэтому мой вопрос: что я делаю неправильно? Ниже приведен код, который шифрует на стороне сервера с помощью PHP
$iv_len = openssl_cipher_iv_length("AES-256-CBC");
$key='My very secret key.......';
$iv = openssl_random_pseudo_bytes($iv_len);
$enc = openssl_encrypt('Hello', "AES-256-CBC", $key, 0, $iv);
$encryptedMessage = base64_encode("Salted__".bin2hex($iv).$enc);
echo json_encode(array('key'=>$key, 'encrypt'=>$encryptedMessage,));
Пожалуйста, есть способ сделать $ iv_len 8bytes долго, а не 16 байт, что этот код постоянно возвращающие и Am Я приближающиеся всю эту установку в правильно. Спасибо
Большое спасибо. Я внес правильные изменения, однако проблема openssl, принимающая только 16 байтов IV и pidcrypt с использованием 32 байтов IV, по-прежнему сохраняется, поэтому получение pidcrypt для расшифровки того, что openssl зашифровано, кажется невозможным. Еще раз спасибо за ваш ответ. –
А, да, извините. Для этого вам необходимо реализовать ['EVP_BytesToKey'] (http://www.openssl.org/docs/crypto/EVP_BytesToKey.html), которая является ключевой функцией деривации, которая использует соль и IV ... –
Опять же, почти все способы шифрования используют IV, который имеет тот же размер, что и базовый блочный шифр. AES может использовать и использовать только 16 байтов IV в режиме CBC. Все остальное * не является IV *. –