Jump to content
php.lv forumi

parole md5+md5


anonīms
 Share

Recommended Posts

hm, atradu tepat forumā

function make_salt(){
$salt='';
for($x=0;$x<64;$x++){
	$salt.=chr(mt_rand(0,255));
}
return $salt;
}

function make_password($salt,$password){
$hashed_password=hash('sha512',$password . $salt,true);
for($x=0;$x<512;$x++){
	$hashed_password=hash('sha512',$hashed_password . $salt,true);
}
$additional_number_of_iterations = ord($hashed_password[0]);
for($x=0;$x<$additional_number_of_iterations;$x++){
	$hashed_password=hash('sha512',$hashed_password . $salt,true);
}
return $hashed_password;
}

$password = $_POST['parole']
$salt = make_salt();
$password = hash('sha512',make_password($salt,$password) . $salt,false);
$salt = bin2hex($salt);

 

kaut ko šādu?

Link to comment
Share on other sites

Nevajag to sāli ģenerēt randomā katru reizi pa jaunam. Citādi nāksies to salt glabāt blakus parolei, un tad toč no tā jēgas nav nekādas.

Lieto kautkādu konstantu (un galvenais garu) salt'u, kuru nedod un nerādi nevienam: $hash = md5($parole . $salt);

Link to comment
Share on other sites

Viena un tā paša sāls izmantošana visiem lietotājiem nav ieteicama, jo tad cilvēkiem ar vienādām parolēm DB būs vienādas hash vērtības. Taču ideja par sāls daļas glabāšanu aplikācijā un daļas glabāšanu DB ir laba, jo tas nozīmē, ka uzbrucējam ir jāpiekļūst gan DB tabulai, gan php failiem.

 

Kas attiecas uz divkāršo hashošanu: tā darīt var, taču arī divkāršo hashu var ar vārdnīcas pārlasi ātri atrast vājai parolei. Diskusija ar manu piedalīšanos, kurā gari un plaši tika spriests par dubulto hashošanu un arī par n-kāršo hašošanu. http://www.sitepoint.com/forums/showthread...=double+hashing

 

Un vēl neizmanto md5 nekam jaunam, jo tā ir nedroša, labāk izmanto sha, vai ja gribi būt megakruts, tad, piemēram, skein (pēdējo gan arī neiesaku, jo tā nav vēl gana izpētīta).

Link to comment
Share on other sites

nāksies to salt glabāt blakus parolei, un tad toč no tā jēgas nav nekādas.

to bubu: varbūt mazliet offtopic, bet datubāzes līmenīs jau nevar zināt, kā tas sāls tika iekļauts paroles hash'ā.

Es tak varu to iekļaut šādi $pass_hash = sha1(sha1($password).$salt), un šādi $pass_hash = sha1($salt.sha1($password)) un vēl simts veidos. Taču, lai to uzzināt, ir jāskatās failos. Un, starp citu, tā pati loģika vien sanāk, ko izteica Aleksejs:

Taču ideja par sāls daļas glabāšanu aplikācijā un daļas glabāšanu DB ir laba, jo tas nozīmē, ka uzbrucējam ir jāpiekļūst gan DB tabulai, gan php failiem.
Link to comment
Share on other sites

Šķiet, ka kaut kas izdevās. Nezinu cik kvalitatīvi, bet te tas ir.

<?php
include "db_123_config.php";
function make_salt(){
$salt='';
for($x=0;$x<64;$x++){
	$salt.=chr(mt_rand(0,255));
}
return $salt;
}

function make_password($salt,$password){
$hashed_password=hash('sha512',$password . $salt,true);
for($x=0;$x<512;$x++){
	$hashed_password=hash('sha512',$hashed_password . $salt,true);
}
$additional_number_of_iterations = ord($hashed_password[0]);
for($x=0;$x<$additional_number_of_iterations;$x++){
	$hashed_password=hash('sha512',$hashed_password . $salt,true);
}
return $hashed_password;
}

$parole = mysql_real_escape_string($_POST['parole']);
$salt = make_salt();
$parole_hash = hash('sha512',make_password($salt,$parole) . $salt,false);
$salt = bin2hex($salt);


echo "Pass: ".$parole_hash."<br />";
echo '<form method="POST">
<input type="text" name="pass" /><br />
<input type="submit" />
</form>';


?>

 

dabuju tādu

9ab8edac8c3b9153c60c0b2c71ed5e828d02f12452eabceb0f8421a5c88a2e77fc32e424084b34b7

4ec71b4982beb6f4dfe973e42b0ebb063fd646dc975bc090

 

 

+ un tad ievadu kverijā insert into blabla user, pass ($user, $parole_hash)

Edited by anonīms
Link to comment
Share on other sites

sry, par dubulto, bet šķiet, ka izmantošu šādu

 

<?php
function crypt_pass($pass, $salt=NULL) {
$salt_len=7;
$algo='sha512';

if (!$salt||strlen($salt)<$salt_len)
{
	$salt=uniqid($pass, TRUE);	 // get unique string (length==23)
}
$salt=substr($salt, 0, $salt_len);

if (function_exists('hash') && in_array($algo, hash_algos()))
{
	$hashed=hash($algo, $salt.$pass);
}
else
{
	$hashed=sha1($salt.$pass);
}
return $salt.$hashed;
}

function pw($pw){
 return md5(md5($pw) . crypt_pass($pw));
}

if($_POST)
{
$parole_hash = pw($_POST['pass']);
}
echo "Pass: ".$parole_hash."<br />";
echo '<form method="POST">
<input type="text" name="pass" /><br />
<input type="submit" />
</form>';

?>

Link to comment
Share on other sites

Es gan no tāda if'a izvairītos (kurš izvēlas starp sha512 un sha1). Aiznesīsi db/kodu uz citu hostu, pēkšņi vairs neviens nevarēs ielogoties.

Labāk nostādi savam kodam prasības izmantot vienu konkrētu hašalgoritmu un viss. Ja tāda nav, tad izmet kļūdu, ka slikti nokofigurēts/uzinstalēts php - lai servera administrators/hostētājs to risina.

Link to comment
Share on other sites

 Share

×
×
  • Create New...