Mysql ecoded bilgi depolama

3 Cevap php

Benim veritabanında bir alan var ve ben kodlanmış bilgileri saklamak istiyorum. Yani ben AES_ENCRYPT (), AES_DECRYPT () işlevleri kullanmak istiyorum.

Ben doğru kullanımı hakkında küçük bir sorun var ...

Yani bu i değiştirmek için gereken ne benim kod, ama birçok yolu denemek ve her zaman SQL sözdizimi hatası alıyorum.

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

Ben bu gibi çalıştı:

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

ve bu:

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

Yardımlarınız için teşekkürler.

3 Cevap

Peki, bu deneyin:

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                   |
+--------------------------------+

İkinci kod pasajı böylece GÜNCELLEME sözdizimi yanlış, herhangi bir sütun için AES_ENCRYPT dönüş değer atamaz. Bkz http://dev.mysql.com/doc/refman/5.1/en/update.html.

Eğer, "info" adlı bir sütun içinde güncelleştirme deyimini şifrelenmiş verileri saklamak istiyorsanız olacağını ... info = AES_ENCRYPT (...

Eğer PHP AES_ENCRYPT adında bir fonksiyonunu değerlendirmek için çalışıyoruz çünkü snipped üçüncü kod geçerli değil. Büyük olasılıkla orada PHP ortamında böyle bir fonksiyonu olduğunu, bu yüzden PHP yorumlayıcı bir hata ile iptal eder.

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

Tamamen sql sorgusu şifrelemek istiyorsanız, değil php istemci tarafında, sunucuda ssl desteği kullanın.