Ну, как новичок в шифровании, я, наконец, получил отличную систему. Проблема в том, что я уверен, что он нарушает мои SQL-запросы. Если бы кто-нибудь из вас мог мне помочь, я уверен, что это то, что я легко забыл. Это код, который я использовал для генерации ключей:Шифрование прерывает запрос MySQL?
include('Crypt/RSA.php');
$rsa = new Crypt_RSA();
extract($rsa->createKey());
И это код для шифрования:
openssl_public_encrypt($data, $encrypted, $publickey);
return $encrypted;
Все это выше работает отлично, и я это называется с помощью функции. Все шифрование работает. Проблема в том, что когда я пытаюсь сохранить значения в базе данных MySQL, мой запрос случайным образом терпит неудачу.
При печати запроса для отладки, я вижу зашифрованную строку «ï¿½ï¿½y�6u�������2�N���Ī� : ������7�����Bï¿ ½ï¿½ï¿½ï¿½ < ����� ��7�;[�N\�����y/�X��ßÖŸ*���
= �- �����Z�EI) �'�cy/� I�� #? ��1Gh�� $ �d�
, который иногда заканчивает строку запроса досрочно. Мне интересно, есть ли конкретная кодировка, которую я должен указать, или мне нужно изменить тип данных MySQL (он был установлен в LONGTEXT, затем LONGBLOB).
Еще раз спасибо!
Прежде чем использовать его в запросе, вы должны закодировать его как base64 или hex. Запросам не разрешается содержать двоичные данные, они должны быть доступны для печати, хотя в базе данных вам разрешено хранить двоичные данные для самого запроса, она должна быть «дезинфицирована» и «печататься». – Patashu
Входная санитария, которую вы не делаете в своем запросе, должна выполняться везде во всех запросах, чтобы обеспечить безопасность ваших сценариев. Специальные символы на вашем входе не должны влиять на ваши запросы. – Paulpro
Возможный дубликат [Как предотвратить SQL-инъекцию в PHP?] (Http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php). До сих пор вы явно вводите исходный ввод в свой SQL. –