Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Salasanan luonti

Sivun loppuun

Tinna [12.09.2005 14:38:28]

#

Mahtaisikohan php:llä saada nopeasti salasanan luotua (tyyliin seitsemän merkkiä, ei skandeja jne.). Mun pitäisi luoda n. 100 salasanaa eikä niitä jaksa itse keksiä..

arcatan [12.09.2005 14:54:32]

#

Pikaisella googletuksella löytyi esimerkiksi tämä sivu: http://www.laughing-buddha.net/jon/php/password/

Anssi V [12.09.2005 15:08:59]

#

http://aspn.activestate.com/ASPN/Cookbook/PHP/Recipe/164739

Meitsi [12.09.2005 16:02:06]

#

md5(time()); ja tuosta leikkelet sopivan pituisen.

wwwapu [12.09.2005 18:34:07]

#

md5(time()); voi olla ongelmallinen seuraavalla tavalla:

<?php
$alku=mktime(12,20,0,9,12,2005);
$loppu=mktime(12,25,0,9,12,2005);
$määrä=$loppu-$alku;

//testiosuus alkaa
$yht='';
print 'Mahdollisia salasanoja viiden minuutin aikana on '.$määrä.' kappaletta ja ne ovat <br>';
for($alku; $alku<=$loppu; $alku++){
	$salasana=substr(md5($alku),0,7);
	print $salasana."<br>";
	$yht.=$salasana;
}

$merkit=count_chars($yht, 1);
print'<p>Merkkien variaatio salasanoissa. Taulukossa merkkien tavuarvot. Käytettyjen merkkien lukumäärä '.count($merkit).'</p>
<pre>';
print_r($merkit);
print '</pre>
<p>Ja sitten vielä merkkien ymmärettävämmät muodot</p>';

foreach($merkit as $merkki =>$kpl){
	print'Merkkiä '. chr($merkki). ' ' .$kpl. ' kappaletta <br>';
}

?>

Kuten tuosta huomataan käyttöön tulee vain 16 erilaista merkkiä. Aikavälin kasvattaminen 5 päivään ei tee asiaan muutosta.

Jon Haworthin funktio on tässä suhteessa parempi. Sillä saadaan varmemmin vaihtelua salasanoihin. Varsinkin jos otetaan mukaan myös isot kirjaimet. Huomasittehan, että mm. e, l ja o puuttuivat käytettävissä olevista merkeistä? Tämä on varmaankin varotoimi liian samannäköisten merkkien osumisesta salasanaan.

[edit: korjasin salasanan pituuden 7 merkkiin]

Meitsi [12.09.2005 18:54:26]

#

Entäpäs jos käyttää time:n sijaan microtimeä?

leftover [12.09.2005 18:58:02]

#

<?php

function SatunnainenMerkkijono ($merkkimaara) {

    $merkit = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz023456789-_";

    srand((double)microtime()*1000000);

    $merkkijono = "";

    for($i=0;$i<$merkkimaara;$i++) {

        $numero = rand() % strlen($merkit);
        $tilapainen = substr($merkit, $numero, 1);
        $merkkijono .= $tilapainen;

    }

    return $merkkijono;

}

echo "</pre>";
for ($i=0;$i<101;$i++) {
    echo SatunnainenMerkkijono(7) . "\n";
}
echo "</pre>";

?>

Jos ei toimi niin ainakin pohja valmiina, eikä kannata tottua täyteen palveluun, sattumoisin oli valmis funktio ja selittäminen olisi kestänyt pidempään *grin*

kayttaja-2791 [12.09.2005 19:43:23]

#

<?php
function MakeRandomPassword($length=4) {
  $_vowels = array ('a', 'e', 'i', 'o', 'u');
  $_consonants = array ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'b', 'c', 'd', 'f', 'g', 'h', 'k', 'm', 'n','p', 'r', 's', 't', 'v', 'w', 'x', 'z');
  $_syllables = array ();
  foreach ($_vowels as $v) {
    foreach ($_consonants as $c) {
      array_push($_syllables,"$c$v");
      array_push($_syllables,"$v$c");
    }
  }
  for ( $i=0;$i<=($length/2);$i++)
    $newpass=$newpass.$_syllables[array_rand($_syllables)];
  return $newpass;
}
?>

Alunperin jostakin kopioitu (PHP manuaali?) ja vähän muokattu. Ei mikään paras mutta eräässä vähemmän julkisessa/tärkeässä projektissa käytetty.

Edit: Sikäli huono että ainoastaan lowercase tapaukset. Tosin voihan siihen jotain strtoupperia sotkea, tai vain laittaa taulukoihin isojakin kirjaimia...

tsuriga [12.09.2005 20:13:31]

#

Hirveätä prosessointiajan tuhlausta tuo. Tuo syllables-taulukko pitäisi määritellä suoraan sivun alussa ja tuoda funktiolle tyyliin global $_syllables; (puuh, näkyvyysalueita kehiin). Nyt se määritellään uudestaan aina, kun tahdotaan luoda salasana. Ja muutenkin length 4 on vähän turhan pieni defaultiksi. Ja $newpass.=..

wwwapu [12.09.2005 22:04:45]

#

Meitsi kirjoitti:

Entäpäs jos käyttää time:n sijaan microtimeä?

Sillä ei ole vaikutusta, koska microtime() palauttaa aivan vastaavanlaisen luvun kuin time(). Se koostuu aina korkeintaan 10 erilaisesta merkistä. Pätkäistäänpä kummasta tahansa mistä kohdasta tahansa 7 merkin mittainen pätkä, ovat ne silti lähes samat. Maksimimäärä tuollaisille pätkille on 1000000. (0000000 -- 9999999)
Haworthin funktiossa lisättynä ISOILLA kirjaimilla on 50 (jos laskin kirjainten määrän oikein) eri merkkiä, joista salasana muodostetaan. Joku joka osaa laskea todennäköisyyksiä heittää pian mikä on todennäköisyys saada 7 oikein 50:stä ja samalla myös sen määrän, mitä erilaisia merkkijonoja voi tuosta muodostaa.

Tinna [13.09.2005 09:08:34]

#

Kiitoksia, sain asian tehtyä!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta