2010-02-15 3 views
2

У меня есть поле в моей базе данных, и я хочу сохранить информацию, закодированную. Поэтому я хотел бы использовать функции AES_ENCRYPT(), AES_DECRYPT().Сохранение информации, закодированной в mysql

У меня есть небольшая проблема, о правильном использовании ...

Так что это мой код, что мне нужно изменить, но я стараюсь это много путей и всегда получаю ошибку синтаксиса SQL.

$query="update users set test='".$_POST['info']."' where name='".$_SESSION['user']."'"; 
mysql_query($query) or die(mysql_error()); 

Я пытался так:

$query="update users set (test='".$_POST['info']."', AES_ENCRYPT('".$_POST['info']."', 'secretkey')) where name='".$_SESSION['user']."'"; 
    mysql_query($query) or die(mysql_error()); 

и это:

$query="update users set test='".$_POST['info']."' where name='".$_SESSION['user']."'"; 
    mysql_query(AES_ENCRYPT('$query','secretkey') or die(mysql_error()); 

Спасибо за помощь.

ответ

1

Ну, попробуйте это:

mysql> create table test(user varchar(100), password varchar(100)); 
Query OK, 0 rows affected (0.09 sec) 

mysql> insert into test(user,password) values('patrick', AES_ENCRYPT('password', 'mykey')); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from test where user = 'patrick'; 
+---------+------------------+ 
| user | password   | 
+---------+------------------+ 
| patrick | stuff   | 
+---------+------------------+ 

mysql> update test set password = AES_ENCRYPT('new password', 'mykey') where user = 'patrick'; 
Query OK, 1 row affected (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

mysql> select AES_DECRYPT(password, 'mykey') from test where user = 'patrick'; 
+--------------------------------+ 
| AES_DECRYPT(password, 'mykey') | 
+--------------------------------+ 
| new password     | 
+--------------------------------+ 
+0

$ query = "update use rs set test = AES_ENCRYPT ('newvalue', 'mykey'), где id = '0' "; mysql_query ($ query) или die (mysql_error()); Начальное значение: START. После запуска вышеуказанное поле запроса будет ПУСТОЙ. Поле VARCHAR 100, utf8_bin. Что не так? – 2010-02-15 10:47:00

+0

Вы уверены, что он пуст или просто непечатаем (и вы не можете его увидеть)? Попробуйте «SELECT AES_DECRYPT (test,« mykey ») FROM users WHERE id = '0';" чтобы проверить это. – Patrick

+0

Я смотрю его в phpmyadmin. его пуст .. (я попробую его с запросом ... но его действительно пустым ..) – 2010-02-15 12:04:46

1

Второй фрагмент кода не присвоить возвращаемое значение AES_ENCRYPT в любой колонке, таким образом, ваш синтаксис UPDATE неверен. См. http://dev.mysql.com/doc/refman/5.1/en/update.html.

Если вы хотите хранить зашифрованные данные в колонке под названием «Информация», ваше заявление обновления на бы ... Информация = AES_ENCRYPT (...

Третий код пропущено не действует, потому что вы» вновь пытается вычислить функцию с именем AES_ENCRYPT в PHP. скорее всего, нет такой функции в РНР среде, поэтому интерпретатор PHP прерывается с ошибкой.

0
`$query="update users set (test='".$_POST['info']."', test_encrypted = AES_ENCRYPT('".$_POST['info']."', 'secretkey')) where name='".$_SESSION['user']."'"; 
mysql_query($query) or die(mysql_error());` 

Если вы хотите шифровать SQL-запрос целиком, использовать SSL поддержка на сервере, а не на стороне клиента php.

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