Двупосочна хешираща функция с ключ?

FestarBG

Registered
Здравейте,
трябва ми хешираща функция, която да е двупосочна, но хешираната стойност да може да се намира само ако имаш нужния ключ (който ще е хардкоднат в php-то).Досега използвах rc4 (реализиран на php), но сега ми трябва хеш стойностите, връщани от функцията да са само цифри и букви.Нещо такова:

function hash($string, $key)
{
...
...
return $encoded_string;
}

И $encoded_string да се състои само от 1-9,a-z.

Мерси много.
 
Когато ми се е налагало съм ползвал този скрипт: http://www.myphpscripts.net/tutorial.php?id=9 :)
 
StormBreaker каза:
В HEX string устройва ли те да си обръщаш данните после?

Не, защо ще ми е да ги обръщам в HEX? :D



@F1r3Fl3x - ще пробвам :)

EDIT: Дават ми грешка и двете функции, никъде не е зададено j.

Други идеи?
 
FestarBG каза:
StormBreaker каза:
В HEX string устройва ли те да си обръщаш данните после?

Не, защо ще ми е да ги обръщам в HEX? :D



@F1r3Fl3x - ще пробвам :)

EDIT: Дават ми грешка и двете функции, никъде не е зададено j.

Други идеи?

Ами rc4 не ти ли ги връща в байтове? Байтовете могат да се обърнат най-лесно в hex, което е само букви и цифри.
 
FestarBG каза:
Ами добре, ако може код за преобразуването в hex..?

Най-добре дай самата криптираща функция дето ползваш. Иначе самото конвертиране става с bin2hex
http://php.net/manual/en/function.bin2hex.php
 
Да, но така трябва да преминавам през криптирано->hex->криптирано->cleartext.
Мен ми трянба криптирано<->cleartext.

:roll:
 
FestarBG каза:
Да, но така трябва да преминавам през криптирано->hex->криптирано->cleartext.
Мен ми трянба криптирано<->cleartext.

:roll:

Дай кода на функцията, че нещо не можем да се разберем. Защо ще "преминаваш" така? То hex променливата ти е текст...
 
class rc4crypt
{
function endecrypt ($pwd, $data, $case='')
{
if($case == 'de')
{
$data = urldecode($data);
}

$key[] = "";
$box[] = "";
$temp_swap = "";
$pwd_length = 0;
$pwd_length = strlen($pwd);

for ($i = 0; $i <= 255; $i++)
{
$key[$i] = ord(substr($pwd, ($i % $pwd_length), 1));
$box[$i] = $i;
}
$x = 0;
for($i = 0; $i <= 255; $i++)
{
$x = ($x + $box[$i] + $key[$i]) % 256;
$temp_swap = $box[$i];
$box[$i] = $box[$x];
$box[$x] = $temp_swap;
}

$temp = "";
$k = "";

$cipherby = "";
$cipher = "";

$a = 0;
$j = 0;

for ($i = 0; $i < strlen($data); $i++)
{
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;

$temp = $box[$a];
$box[$a] = $box[$j];

$box[$j] = $temp;

$k = $box[(($box[$a] + $box[$j]) % 256)];
$cipherby = ord(substr($data, $i, 1)) ^ $k;

$cipher .= chr($cipherby);
}

if ($case == 'de')
{
$cipher = urldecode(urlencode($cipher));

}
else
{
$cipher = urlencode($cipher);
}

return $cipher;
}
}
 

Back
Горе