Newsgroup: it.comp.www.php
Titolo: problema con AES_ENCRYPT/DECRYPT

E' da ieri che non riesco a uscire da questo problema:
Ricevo una stringa (form,input,type=text)
la escapo (mysql_real_escape_string) e la metto sul DB crittandola
(AES_ENCRYPT).
Me la rileggo (SELECT  AES_DECRYPT) e testo se quello che ho letto e'
uguale a quello che ho scritto.
La cosa funziona quasi sempre.
Quasi tutte le stringhe vanno bene qualunque combinazione di apici,
doppi apici, porcherie varie contengano, altre invece mi falliscono
sempre (ovvero qualunque sia la 'chiave' che passo alla funzione
AES_EN/DECRYPT)
Per esempio rileggendo questa stringa
doppio " apice
mi fallisce sempre.
NON credo sia un problema di apici (ma a questo punto sono cotto e
potrei sbagliare) perche' se non encritto/decritto il campo nel DB
tutto funziona perfettamente.
Ho provato a definire il campo del DB come VARCHAR o come BINARY , ma
nulla cambia <sgrunt>
Qualcuno a qualche idea ?
GRASSIE !

 GRASSIE !
 

 Forse e' un problema di encodeing dei charset?
grazie x la risposta.
si' l'escape la faccio
ho provato a definire il campo come TEXT e nulla cambia :-(
... get data from user:
echo " <form action=\"thisScript.php\" name='theName' method=\"post\">
\n";
echo "<input name=\"cat\" type=\"text\" value=\"\"  maxlength=\"20\"
size=\"20\" >\n";
echo "<br><INPUT type=\"submit\" style=\"height: 25px; width: 100px\"
value=\"GO\"><br><br>";
... connect & select DB
... Write to DB
$s_="SALT";
$cat=$_REQUEST['cat'];
$cat=mysql_real_escape_string($cat);
mysql_query("INSERT INTO `tableName` (`catName`) VALUES
( AES_ENCRYPT('$cat' , '$s_') )");
$rc_=mysql_insert_id();
... read it from DB
$rlib=mysql_query("SELECT  AES_DECRYPT(`catName`, '".$s_."') as cate
FROM  `tableName` where `cat_idx` = ".$rc_."")or die(mysql_error());
$myrow = mysql_fetch_array($rlib);
$out=$myrow['cat'];
if ( $out != $_REQUEST['cat'] ) echo "<br><br><b>BAD !</b><br><br>";

 
 
Il problema e' qui leggi $myrow['cat'], ma l'alias nella query e' 'cate'
Cambiando in 
   $out=$myrow['cate']; 
dovrebbe funzionare
 
J.
 

Purtroppo no :-(
il "catE" e' stato un mio errore di editing mentre ritagliavo il
codice scrivendo il post.
Grazie comunque x l'attenzione


ok, sembra essere un problema mysql e non php ... vado a piangere da
un'altra parte.
grazie a tutti x l'aiuto.
V.
You're right, it's a mysql problem.
Thank you for your help
Vivi
 
mysql> truncate table `ex_categoria_master` ;
Query OK, 0 rows affected (0.00 sec)
 
mysql> INSERT INTO `ex_categoria_master` (`categoria_nome`) VALUES
( AES_ENCRYPT('doppio apice " f','SALT') );
Query OK, 1 row affected, 1 warning (0.02 sec)
 
mysql> SELECT  AES_DECRYPT(`categoria_nome`, 'SALT') as bunny  ,
`categoria_nome` FROM `ex_categoria_master` where `categoria_idx` = 1;
+-------+--------------------------------+
| bunny | categoria_nome                 |
+-------+--------------------------------+
| NULL  | gð]q’3$Û  í¹-) £•…É0³ „¬^ }ü   |
+-------+--------------------------------+
1 row in set (0.00 sec)
 
mysql> select categoria_idx , `categoria_nome` from
ex_categoria_master;
+---------------+--------------------------------+
| categoria_idx | categoria_nome                 |
+---------------+--------------------------------+
|             1 | gð]q’3$Û  í¹-) £•…É0³ „¬^ }ü   |
+---------------+--------------------------------+
1 row in set (0.00 sec)


Quando ci usa crypt e decrypt di solito il cryptato lo si tratta sempre 
col base64, sia x scriverlo (db o file) sia x passarlo come parametro.
La crittazione tira fuori caretteri assurdi, che di fatto è impossibile 
trattare con sicurezza. Quando poi rileggi  quello che hai salvato, lo 
base64 decodi e poi decripti.
 
 
-- 
Z.

mi faccio i complimentida solo x quanto sono furbo:
ho definito il campo crittato troppo corto x cui tutte le stringhe +
lunghe di 16 caratteri venivano "corrotte"
.... no comment, please

 Vivi
 
versione di mysql ? ( solo per curiositï¿½ )
 

 versione di mysql ? ( solo per curiosit )
5.1.41


yeah.. ci avevo preso al primo colpo!
quindi i campi non erano text o longtext, malandrino!
 
:)
 
J.