PDA

Zobacz pełną wersję : Zmienna salt co? gdzie? jak?



wujeksamozuo
22-03-2013, 13:02
Witam pisze formularz rejestracyjny dla joomli na własne potrzeby i mam problem z zakodowaniem hasła, otóż hasło jak dobrze wyczytalem jest kodowane przez md5 aczkolwiek jeszcze dochodzi $salt i tu pytanie, gdzie ona jest zapisana? bo w koncu musi miec jakąś stałą wartość.
Z formularza pobieram zmienną $haslo by dopisać użytkownika do bazy musze wykonać zapytanie (tu fragment dotyczący hasla) bodajże md5($haslo.$salt) tylko skąd pobrać $salt?

wujeksamozuo
23-03-2013, 00:25
Widze ze nie chcecie pomóc, wątpie ze nie wiecie to moze inaczej spytam... Doszedłem do tego ze cała funkcja kryptowania hasła jest w pliku helper/.php w katalogu /libraries/joomla/user/
Poniżej fr..

public static function getCryptedPassword($plaintext, $salt = '', $encryption = 'md5-hex', $show_encrypt = false)
{
// Get the salt to use.
$salt = JUserHelper::getSalt($encryption, $salt, $plaintext);

// Encrypt the password.
switch ($encryption)
{
case 'plain':
return $plaintext;

case 'sha':
$encrypted = base64_encode(mhash(MHASH_SHA1, $plaintext));
return ($show_encrypt) ? '{SHA}' . $encrypted : $encrypted;

case 'crypt':
case 'crypt-des':
case 'crypt-md5':
case 'crypt-blowfish':
return ($show_encrypt ? '{crypt}' : '') . crypt($plaintext, $salt);

case 'md5-base64':
$encrypted = base64_encode(mhash(MHASH_MD5, $plaintext));
return ($show_encrypt) ? '{MD5}' . $encrypted : $encrypted;

case 'ssha':
$encrypted = base64_encode(mhash(MHASH_SHA1, $plaintext . $salt) . $salt);
return ($show_encrypt) ? '{SSHA}' . $encrypted : $encrypted;

case 'smd5':
$encrypted = base64_encode(mhash(MHASH_MD5, $plaintext . $salt) . $salt);
return ($show_encrypt) ? '{SMD5}' . $encrypted : $encrypted;

case 'aprmd5':
$length = strlen($plaintext);
$context = $plaintext . '$apr1$' . $salt;
$binary = JUserHelper::_bin(md5($plaintext . $salt . $plaintext));

for ($i = $length; $i > 0; $i -= 16)
{
$context .= substr($binary, 0, ($i > 16 ? 16 : $i));
}
for ($i = $length; $i > 0; $i >>= 1)
{
$context .= ($i & 1) ? chr(0) : $plaintext[0];
}

$binary = JUserHelper::_bin(md5($context));

for ($i = 0; $i < 1000; $i++)
{
$new = ($i & 1) ? $plaintext : substr($binary, 0, 16);
if ($i % 3)
{
$new .= $salt;
}
if ($i % 7)
{
$new .= $plaintext;
}
$new .= ($i & 1) ? substr($binary, 0, 16) : $plaintext;
$binary = JUserHelper::_bin(md5($new));
}

$p = array();
for ($i = 0; $i < 5; $i++)
{
$k = $i + 6;
$j = $i + 12;
if ($j == 16)
{
$j = 5;
}
$p[] = JUserHelper::_toAPRMD5((ord($binary[$i]) << 16) | (ord($binary[$k]) << 8) | (ord($binary[$j])), 5);
}

return '$apr1$' . $salt . '$' . implode('', $p) . JUserHelper::_toAPRMD5(ord($binary[11]), 3);

case 'md5-hex':
default:
$encrypted = ($salt) ? md5($plaintext . $salt) : md5($plaintext);
return ($show_encrypt) ? '{MD5}' . $encrypted : $encrypted;
}
}

Jak widac jest tu tez poszukiwana przeze mnie zmienna $salt ale teraz inne pytanie, czy istnieje mozliwość zmiany tak by wykluczyć ta zmienna? by haslo bylo kodowane np tylko przy uzyciu md5?