2010-02-15 4 views
2

J'ai un champ dans ma base de données et je veux stocker les informations encodées. Donc, je voudrais utiliser les fonctions AES_ENCRYPT(), AES_DECRYPT().Stockage des informations ecoded dans mysql

J'ai un petit problème sur le droit d'utilisation ...

C'est donc mon code ce que je dois modifier, mais je l'essayer plusieurs façons et toujours obtenir erreur de syntaxe SQL.

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

J'ai essayé comme ceci:

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

et ceci:

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

Merci pour l'aide.

Répondre

1

Eh bien, essayez ceci:

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 = "mise à jour utilisation rs set test = AES_ENCRYPT ('newvalue', 'mykey') où id = '0' "; mysql_query ($ query) ou die (mysql_error()); La valeur de départ du champ est: START. Après l'exécution, le champ de requête ci-dessus sera VIDE. Le champ est VARCHAR 100, utf8_bin. Qu'est-ce qui ne va pas? –

+0

Etes-vous sûr qu'il est vide ou simplement non imprimable (et vous ne pouvez pas le voir)? Essayez "SELECT AES_DECRYPT (test, 'mykey') FROM utilisateurs WHERE id = '0';" pour le vérifier. – Patrick

+0

je le regarde dans le phpmyadmin. son vide .. (je l'essaie avec une requête à ... mais c'est vraiment vide ..) –

1

Le deuxième extrait de code n'attribue pas la valeur de retour de AES_ENCRYPT à une colonne, donc votre syntaxe UPDATE est incorrecte. Voir http://dev.mysql.com/doc/refman/5.1/en/update.html.

Si vous souhaitez stocker les données cryptées dans une colonne « info », votre déclaration de mise à jour à serait ... info = AES_ENCRYPT (...

Le troisième code snipped n'est pas valide parce que vous re d'essayer d'évaluer une fonction nommée AES_ENCRYPT en PHP. Très probablement il n'y a pas cette fonction dans votre environnement PHP, l'interpréteur PHP avorte avec une erreur.

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());` 

Si vous voulez crypter requête SQL entièrement, utilisez ssl support sur le serveur, pas dans le côté client php

Questions connexes