存储在mysql中编码的信息

时间:2010-02-15 10:16:27

标签: php mysql encryption

我的数据库中有一个字段,我想存储编码的信息。所以我想使用AES_ENCRYPT(),AES_DECRYPT()函数。

我对正确使用方法有一点问题......

所以这是我的代码,我需要修改,但我尝试了很多方法,总是得到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());

3 个答案:

答案 0 :(得分: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                   |
+--------------------------------+

答案 1 :(得分:1)

第二个代码段不会将AES_ENCRYPT的返回值分配给任何列,因此您的UPDATE语法不正确。请参阅http://dev.mysql.com/doc/refman/5.1/en/update.html

如果要将加密数据存储在名为“info”的列中,则更新语句at将为... info = AES_ENCRYPT(...

第三个被剪切的代码无效,因为您正在尝试在PHP中评估名为AES_ENCRYPT的函数。很可能PHP环境中没有这样的功能,因此PHP解释器会因错误而中止。

答案 2 :(得分: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客户端使用。