|
|
|
| воспользовался этим кодом шифровки данных:
$key='key';
function crypt_xor($data, $key){
$datalen = strlen($data);
$keylen = strlen($key);
if($keylen == 0)return false; // Ключ пустой
$xored = '';
for($i = 0; $i < $datalen; $i += $keylen)$xored .= substr($data, $i, $keylen) ^ $key;
return $xored;
}
function encrypt_xor($data, $key){
return crypt_xor(md5($data) . $data, $key);
}
function decrypt_xor($data, $key){
if(false === $t = crypt_xor($data, $key)){return false;} // Ключ пустой
$md5=substr($t, 0, 32);
$unxored=substr($t, 32);
if($md5 != md5($unxored)){echo 'ошибка';return false;} // Ключ не подходит или данные повреждены
return $unxored;
}
|
все работает прекрасно, но есть проблема с выводом данных с бд и расшифровкой их, делаю так:
$key='key';
$pass=encrypt_xor($_POST['pass'],$key);
mysql_query("UPDATE `test` SET `pass`='$pass' WHERE nik='admin'");
$q=mysql_fetch_array(mysql_query("SELECT * FROM `test` WHERE `nik`='admin'"));
echo $pass;//выводит кодированные данные
echo $q['pass'];//выводит нормально также как и $pass
decrypt_xor($pass,$key);//выводит нормально
decrypt_xor($q['pass'],$key); //выдает ошибку.
|
| |
|
|
|
|
|
|
|
для: demka
(28.03.2008 в 14:20)
| | пробывал сравнить if ($pass!=$q['pass'])echo 'ошибка';//выводить ошибку. значит при записи или при доставании с бд происходит ошибка, но где? | |
|
|
|
|
|
|
|
для: demka
(28.03.2008 в 14:29)
| | Ошибка есть как минимум тут:
> mysql_query("UPDATE `test` SET `pass`='$pass' WHERE nik='admin'");
Нужно эскейпировать спец. символы:
mysql_query("UPDATE `test` SET `pass`='" . mysql_escape_string($pass) . "' WHERE nik='admin'");
> echo $pass;//выводит кодированные данные
> echo $q['pass'];//выводит нормально также как и $pass
>
> decrypt_xor($pass,$key);//выводит нормально
> decrypt_xor($q['pass'],$key); //выдает ошибку.
Сделай var_dump($pass === $q['pass'], decrypt_xor($pass,$key) === decrypt_xor($q['pass'],$key));
> выдает ошибку
Какую? | |
|
|
|