anonīms Posted February 8, 2009 Report Share Posted February 8, 2009 Vai ir iespējams veidot md5(md5($parole))? Nu vai neradīsies vēlāk kādas problēmas? Link to comment Share on other sites More sharing options...
rausis Posted February 8, 2009 Report Share Posted February 8, 2009 neradīsies, bet labāk klāt izmanto kādu sāli(salt) :) Link to comment Share on other sites More sharing options...
anonīms Posted February 8, 2009 Author Report Share Posted February 8, 2009 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 More sharing options...
bubu Posted February 8, 2009 Report Share Posted February 8, 2009 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 More sharing options...
anonīms Posted February 8, 2009 Author Report Share Posted February 8, 2009 Vairs neko nesparotu.. Tātad es varu piemēram $md5 = md5($parole); $salts = 'kakulacis123456'; $parole_kas_iet_kverijaa = "".$salts.""."$md5"'; ? Link to comment Share on other sites More sharing options...
Val Posted February 8, 2009 Report Share Posted February 8, 2009 Izlasi bubu pēdējo postu piecas reizes :) Link to comment Share on other sites More sharing options...
Aleksejs Posted February 9, 2009 Report Share Posted February 9, 2009 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 More sharing options...
anonīms Posted February 9, 2009 Author Report Share Posted February 9, 2009 (edited) tātad es md5 aizstājot ar sha padaru drošāku to visu? (autorizāciju) $str = sha1($_POST['pass']); Edited February 9, 2009 by anonīms Link to comment Share on other sites More sharing options...
bubu Posted February 9, 2009 Report Share Posted February 9, 2009 sha1 ir gandrīz tikpat nedrošs kā md5. Aleksejs, sakot sha, droši vien domāja SHA-256, ja pat ne SHA-512. Skaties uz hash un hash_algos funkcijām. Taču papildus salt's arī SHA funkcijām nekaitēs. Tas padarīs to visu daudz drošāku. Link to comment Share on other sites More sharing options...
Aleksejs Posted February 9, 2009 Report Share Posted February 9, 2009 anonīms, sāls būtu obligāti jāizmanto. Par dažādām hash funkcijām un to stiprību vari palasīties te: http://www.larc.usp.br/~pbarreto/hflounge.html http://ehash.iaik.tugraz.at/wiki/The_SHA-3_Zoo Link to comment Share on other sites More sharing options...
Analgiins Posted February 9, 2009 Report Share Posted February 9, 2009 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 More sharing options...
anonīms Posted February 9, 2009 Author Report Share Posted February 9, 2009 (edited) Šķ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 9ab8edac8c3b9153c60c0b2c71ed5e828d02f12452eabceb0f8421a5c88a2e77fc32e424084b34b74ec71b4982beb6f4dfe973e42b0ebb063fd646dc975bc090 + un tad ievadu kverijā insert into blabla user, pass ($user, $parole_hash) Edited February 9, 2009 by anonīms Link to comment Share on other sites More sharing options...
anonīms Posted February 9, 2009 Author Report Share Posted February 9, 2009 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 More sharing options...
bubu Posted February 9, 2009 Report Share Posted February 9, 2009 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 More sharing options...
anonīms Posted February 9, 2009 Author Report Share Posted February 9, 2009 labi Link to comment Share on other sites More sharing options...
Recommended Posts