2016-06-11 7 views
0
$stmt2 = $dbh-> prepare("Select * from encryptme where ".decrypt('encryptedcolumn', $key)." = ?"); 
$stmt2 -> bindValue(1, $dec, PDO::PARAM_STR); 
$stmt2 -> execute(); 

У меня есть encrypt() и decrypt() я сохранить данные после использования encrypt() Теперь я хочу, чтобы выбрать данные, но я не в состоянии, так как данные шифруются. То, что я попытался это я использовал функцию в имени столбца, но она не работает, я получаю ошибку говорярасшифровано значение из MySQL п.д.о. PHP

Uncaught исключение «PDOException» с сообщением «SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '='

Как я могу расшифровать столбец в инструкции запроса?

+2

Вы хотите расшифровать то, что приходит _back_ из запроса, не так ли? Таким образом, вам нужно получить значение внутри зашифрованного столбца, а затем запустите расшифровку значений. –

+0

что я хочу, я хочу выбрать дешифрованное значение из столбцов .. вы '$ dec' это дешифрованное значение. Я хочу выбрать столбец' encryptme' для значения '$ dec', но я не могу см. его, поскольку этот столбец зашифрован. Итак, что я сделал, я запускаю функцию 'decrypt()' на столбце .. но я получаю ошибку .. Как я могу расшифровать значение в where where? @JonStirling –

+0

@JonStirling Как я могу сделать это в where clause? –

ответ

0

Вот ваше решение

$stmt2 = $dbh-> prepare("Select * from encryptme where CAST(AES_DECRYPT(encryptedcolumn, 'key') AS CHAR) = ?"); 
$stmt2 -> bindValue(1, $dec, PDO::PARAM_STR); 
$stmt2 -> execute(); 

Все самое лучшее.

+0

вот что я попробовал, дайте ошибку ...если вы проверите мой вопрос, вы сделаете это, я попробовал его –

+0

Здесь 'AES_DECRYPT' должен быть совместим с' encrypt() '(что бы это ни было). Откуда вы знаете, что он совместим? –

1

Вы не можете использовать функцию php для дешифрования значения в базе данных во время запроса. (Вы можете использовать функцию базы данных, если она поддерживает метод enccryption)

Вы можете вместо этого отправить зашифрованный параметр в базу данных, чтобы сравнить его с зашифрованным сохраненным значением.

После извлечения данных вы можете расшифровать значение, чтобы сделать все, что вам нужно.

редактировать после новой информации:

Если вы не можете надежно зашифровать значения в PHP, вам придется извлечь все данные из базы данных, а затем расшифровать его, так что вы можете сравнить значение.

+0

Я пробовал это уже, но зашифрованное значение не всегда одно и то же, они разные, поэтому я не могу его использовать .. Именно поэтому я думал, что дешифрование будет работать. ** Вместо этого вы можете отправить зашифрованный параметр в базу данных, чтобы сравнить его с зашифрованным сохраненным значением. ** Я не понимаю, как это сделать? –

+1

* «Вместо этого вы можете отправить зашифрованный параметр в базу данных, чтобы сравнить его с зашифрованным сохраненным значением». * - Возможно ли, что это зависит от 'encrypt()' и является ли оно семантически безопасным (рандомизированным). Если да, то это невозможно, что вы предлагаете. Если это не так, возможно, используется [ECB] (http://crypto.stackexchange.com/a/14490/13022). –

+0

@ArtjomB. да, это случайность, потому что я вижу в базе данных значения разные, когда они одни и те же данные. –

Смежные вопросы