tobrukDk Nybegynder
19. november 2012 - 23:03 Der er 18 kommentarer og
1 løsning

Hash på password

Hej

Det er sådan at jeg har opret indlæg her;
http://www.udvikleren.dk/forum/39136/hash-paa-password/side3/

men Det er sådan at mit problem er at den vil gerne opret bruger med  crypt. lige nu ser password sådan her ud;


$6$j7Rd68RhKNx.6ccH$9lvRDdks.jx4hk7.YQ0hpvzPE22h/BZQ/9yXiwTMBV1Kx2xr2gbIZZJxYjeLrA41nL2WGjmt.FMQi877uOXrP1


sådan her ser det ud når man "opret en bruger",


function bruger_opret_siden(){
            if ($stmt = $this->mysqli->prepare('SELECT NULL FROM `bruger` WHERE `brugernavn` = ?'))
            {
                $stmt->bind_param('s', $brugernavn);
                $brugernavn = $_POST["brugernavn"];
                $stmt->execute();
                $stmt->store_result();
                $count = $stmt->num_rows;
                $stmt->close();
                if($count > 0)
                {
                    $user_found = 1;
                }
            }
            if(!isset($user_found))
            {
                if($_POST["pass"] != $_POST["gentag"])
                {
                    $errors = 1;
                    echo "<li id=\"check_not\">Angive ens password på siden..</li>";
                }
                if(empty($_POST["pass"]) && empty($_POST["gentag"]))
                {
                    $errors = 1;
                    echo "<li id=\"check_not\">Angive et password på siden..</li>";
                }
                if(empty($_POST["navn"]))
                {
                    $errors = 1;
                    echo "<li id=\"check_not\">Angive et Fornavn</li>";
                }
                if(empty($_POST["efternavn"]))
                {
                    $errors = 1;
                    echo "<li id=\"check_not\">Angive et Efternavn</li>";
                }
                if(empty($_POST["land_by"]))
                {
                    $errors = 1;
                    echo "<li id=\"check_not\">Angive en by</li>";
                }
                if(empty($_POST["hojde"]))
                {
                    $errors = 1;
                    echo "<li id=\"check_not\">Angive en Højde</li>";
                }
                if(empty($_POST["email"]))
                {
                    $errors = 1;
                    echo "<li id=\"check_not\">Angive en Email</li>";
                }
                if(empty($_POST["brugernavn"]))
                {
                    $errors = 1;
                    echo "<li id=\"check_not\">Angive en Højde</li>";
                }
               
                if(!isset($errors))
                {
                    $pb = null;
                       
                    include 'function/class.upload.php';
                    $handle = new Upload($_FILES["file"]);
                   
                    if($handle->uploaded)
                    {
                        //lidt mere store billeder
                        $handle->image_resize = true;
                        $handle->image_ratio_y = true;
                        $handle->image_x = 220;
                        $handle->Process("profil-img/store");
                       
                        //til profil billede lign..
                        $handle->image_resize = true;
                        $handle->image_ratio_crop = true;
                        $handle->image_y = 115;
                        $handle->image_x = 100;
                        $handle->Process("profil-img");
                       
                        //til profil billede lign..
                        $handle->image_resize = true;
                        $handle->image_ratio_crop = true;
                        $handle->image_y = 75;
                        $handle->image_x = 75;
                        $handle->Process("profil-img/lille");
                        $pb = $handle->file_dst_name;           

                    }
           
                $password = $_POST["pass"];
                $algorithm = '$6$'; //<--- Dette betyder SHA 512
                $salt = $this->generateSalt(16); //<--- SHA 512 bruger et 16 tegn langt salt
           
                $hash = crypt($password, $algorithm . $salt);

                if ($stmt = $this->mysqli->prepare('INSERT INTO `bruger`
                (`rank`, `email`, `brugernavn`, `password`, `profilbillede`, `profilbillede_godkendt`, `navn`, `efternavn`, `alder_d`, `alder_m`, `alder_aar`, `status`, `kon`, `seksualitet`, `land_by`, `hojde`)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'))
                {
                   
                    $stmt->bind_param('issssisssssiiisi', $rank, $email, $brugernavn, $password, $profilbillede, $pb_godkendt, $navn, $efternavn, $alder_d, $alder_m, $alder_aar, $kon, $seksualitet, $partnerstatus, $land_by, $hojde);
                    $rank = '1';
                    $pb_godkendt = '1';
                    $email = $_POST["email"];
                    $brugernavn = $_POST["brugernavn"];//C
                    $password = $hash;//C
                    $profilbillede = $pb;//C
                    $navn = $_POST["navn"];
                    $efternavn = $_POST["efternavn"];
                    $alder_d = $_POST["alder_d"];
                    $alder_m = $_POST["alder_m"];
                    $alder_aar = $_POST["alder_aar"];
                    $kon = $_POST["kon"];
                    $seksualitet = $_POST["seksualitet"];
                    $partnerstatus = $_POST["partnerstatus"];
                    $land_by = $_POST["land_by"];
                    $hojde = $_POST["hojde"];
                   
                    $stmt->execute();
                    $stmt->close();
                   
                    echo "godkendt";
                       
                    }
                    else
                    {
                        /* Der er opstået en fejl */
                        echo 'Der opstod en fejl i erklæringen til ligge i databasen: ' . $mysqli->error;
                    }
                }
            }
            else
            {
                echo "<li id=\"check_not\">Dette brugernavn er optaget!!</li>";
            }
    }

men der hvor password bliver salt m.v. gøre den her eller hvordan man skal beskrive det;



function generateSalt($length) {
        $alphabet = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        $alphabet_length = strlen($alphabet);
        $salt = '';
        for ($i = 0; $i < $length; $i++) {
            $salt .= $alphabet[rand(0, $alphabet_length - 1)];
        }
        return $salt;
    }


Så skal det også være sådan at bruger har mulighed for at log ind på siden med det crypt password som vi har opret i databasen. skal kun være muligt at log ind på siden med det password.


function godkendt_bruger_login(){
        if($stmt = $this->mysqli->prepare('SELECT `id`, `brugernavn`, `password`, `rank`, `profilbillede`, `profilbillede_godkendt` FROM `bruger` WHERE `brugernavn` = ? AND `password` = ?'))
        {
        $stmt->bind_param('ss', $brugernavn, $password);
        $brugernavn = $_POST["brugernavn"];
        $password = crypt($_POST["pass"] . '$6$' . './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');
        $stmt->execute();
        $stmt->store_result();
        $stmt->bind_result($id, $brugernavn, $password, $rank, $profilbillede, $profilbillede_godkendt);
        $stmt->fetch();
        $count = $stmt->num_rows;
        $stmt->close();
       
            if($count > 0)
            {
                $_SESSION["logged_in"] = true;
                $_SESSION["id"] = $id;
                $_SESSION["profilbillede"] = $profilbillede;
                $_SESSION["brugernavn"] = $brugernavn;
                $_SESSION["rank"] = $rank;
                $_SESSION["profilbillede_godkendt"] = $profilbillede_godkendt;
                $_SESSION["password"] = $_POST["password"];
   
               
                if($_SESSION["logged_in"] == true)
                {
                    echo "Godkendt";
                   
                }
                else
                {
                    echo "<p>Desværre prøve igen brugernavn eller adgangskode passe ikke med vores</p>";
                }
            }
            else
            {
                echo "<p>Skrive brugernavn og Password</p>";
            }
    }
    }



Så ind på log ind side/filen ser det sådan her ud;


    <?php
    /*
    * Giver admin adgang til se indhold på siden.
    */
    if(isset($_SESSION["rank"]) && $_SESSION["rank"] > 0) {
        $bruger = $mebe->brugerindhold_side();
    }
   
   
    /*
    * Hvis ingen af dem så få de bare adgang sådan her..
    */
    else{
    ?>
<form name="login" method="post" action="#">
    <h1>Log ind</h1>
    <p>Brugernavn</p><input type="text" name="brugernavn"/>
    <p>Password</p><input type="password" name="pass"/>
    <br />
    <input type="submit" name="Log_ind" value="Log ind" id="login">
    <?php
    if(isset($_POST["Log_ind"]))
    {
    $login = $mebe->godkendt_bruger_login();
    }
    ?>
    <ul>
        <li><a href="">Glemt Brugernavn</a></li>
        <li><a href="/opret-bruger/">Opret Bruger</a></li>
    </ul>
</form>
<?php
    }
?>


Det vil være super hvis du kun hjælp mig eller forklare mig hvad jeg skal gøre bedre. eller hvad skal gøre for du tror mit log ind system kan virker for mig?
The_Buzz Nybegynder
20. november 2012 - 08:09 #1
Det er godtnok et langt kryptet password.

Har du prøvet SHA1 eventuelt med salt?
$salt1 = 'l3ooiu3rnonlafl23rkndsaknf';
$salt1 = 'UIEWI#IHUR¤=)VU=)=)#/¤';

$dbpassword_string = sha1($salt2.$_POST["pass"].$salt)
tobrukDk Nybegynder
20. november 2012 - 12:20 #2
Kan jeg ikke også bare gøre sådan her;


$password = 'mypassword';
$hash = crypt($password);
tobrukDk Nybegynder
20. november 2012 - 12:30 #3
Lige et svar jeg gjor sådan noget i den still som du vise mig:

bare sådan her


$password = sha1('ri629' . $_POST["pass"] . 'h1ry6328');
tobrukDk Nybegynder
20. november 2012 - 12:40 #4
men vil det ikke været et stort hul i sikkerheden?
The_Buzz Nybegynder
20. november 2012 - 12:50 #5
Sha1 er da det mest sikre "lægmands" kryptering i php

Sha1 kan du encrypt, men du kan ikke decrypte det.

Webmaster kender ikke password - og derfor kan det ikke hackes som det skete med sex.dk for nylig.

Derimod gemmer du en streng som er saltet og måske endda dobbelt saltet.

Check om bruger har lavet det rette password ved login:

if (sha1($salt2.$_POST["pass"].$salt) === $databaseentry) {
  echo 'Access granted';
} else {
  echo 'Access denied';
}
tobrukDk Nybegynder
20. november 2012 - 12:54 #6
f.eks sådan her;


function godkendt_login()
    {   
        if ($stmt = $this->mysqli->prepare("SELECT `id`, `brugernavn`, `password`, `rank`, `profilbillede`, `profilbillede_godkendt` FROM `bruger` WHERE `brugernavn` = ? AND `password` = ?"))
        {
            $stmt->bind_param('ss', $brugernavn, $password);
            $brugernavn = $_POST["brugernavn"];
            $password = sha1('rir21551=638_hyeu!@?emerdsverv_3629' . $_POST["pass"] . 'h1red_d1515n@hd111dyn?y6328');
            $stmt->execute();
            $stmt->store_result();
            $stmt->bind_result($id, $brugernavn, $password, $rank, $profilbillede, $profilbillede_godkendt);
            $stmt->fetch();
            $count = $stmt->num_rows;
            $stmt->close();
           
            if($count > 0)
            {
                $_SESSION["logged_in"] = true;
                $_SESSION["id"] = $id;
                $_SESSION["profilbillede"] = $profilbillede;
                $_SESSION["brugernavn"] = $brugernavn;
                $_SESSION["rank"] = $rank;
                $_SESSION["profilbillede_godkendt"] = $profilbillede_godkendt;
               
                if($_SESSION["logged_in"] == true)
                {
                    if (sha1('rir21551=638_hyeu!@?emerdsverv_3629' . $_POST["pass"] . 'h1red_d1515n@hd111dyn?y6328') === $password) {
                          echo "godkendt";
                    } else {
                      echo '<p>desværre passer adgangskode ikke til det</p>';
                    }
                }
                else
                {
                    echo "Desværre prøve igen.";
                }
            }
            else
            {
                echo "Skrive et password eller brugernavn";
            }
        }
    }
arne_v Professor
20. november 2012 - 21:07 #7
SHA-1 er foraeldet idag. Brug SHA-256.
arne_v Professor
20. november 2012 - 21:08 #8
Det er meget vigtigt at bruge forskelligt salt for hver bruger.
tobrukDk Nybegynder
20. november 2012 - 22:49 #9
arne_v Professor
20. november 2012 - 22:57 #10
Det er vist funktionen til SHA-256 i PHP.
tobrukDk Nybegynder
22. november 2012 - 01:52 #11
Okay men jeg gøre bare sådan her;


sha1('rir21551=638_hyeu!@?emerdsverv_3629' . $_POST["pass"] . 'h1red_d1515n@hd111dyn?y6328')



#The_Buzz ligge et svar som tak for hjælpen da ellers...
arne_v Professor
22. november 2012 - 04:12 #12
Hvorfor pokker gaa efter en ikke optimal loesning??
tobrukDk Nybegynder
22. november 2012 - 13:05 #13
Hvad skal jeg så tag?
arne_v Professor
22. november 2012 - 20:10 #14
forskellig salt per bruger og SHA-256 evt. med flere iterationer
tobrukDk Nybegynder
23. november 2012 - 06:27 #15
okay, men hvor kan jeg finde det hen?
arne_v Professor
24. november 2012 - 02:03 #16
finde hvad??
tobrukDk Nybegynder
25. november 2012 - 00:57 #17
ligemeget, jeg har klart det, jeg fandt en video på youtube omkring det :)
tobrukDk Nybegynder
26. november 2012 - 10:28 #18
Arne_v og The_Buzz ligge et svar?
tobrukDk Nybegynder
04. december 2012 - 06:54 #19
lige selv lige et svar.
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Computerworld
Ny bil i 2030? Mercedes-Benz har allerede bygget den ... og den kører på 10 MacBooks
Mercedes-Benz F015 ligner ikke noget, du kan finde på hylderne hos nogen bilforhandler. Den stålgrå maskine med de indbydende former er da også mere en vision og et rullende eksperiment end en bil, du kan bruge til noget. Og så er den fyldt med MacBooks under motorhjelmen.
CIO
Morten Mogensens firma blev forsøgt svindlet, men snød selv svindleren: "Vi tager det som en oplevelse"
Dansk virksomhed blev bedt om af sende 100.000 kroner til en hemmelig konto via en mail, der var afsendt som en besked fra direktøren til regnskabsafdelingen. Phishing-forsøget blev opdaget, og direktøren og regnskabschefen tog en fiffig hævn.
Comon
Microsoft er klar med firmaets næste konsol: Her er lanceringsdatoen i Danmark
Det nye familiemedlem ankommer i butikkerne den 2. august. Se hvad der bydes på af nyheder til spil-og film-folket.
Channelworld
Nordmænd køber dansk software-hus - medarbejderne bliver
Norske Amesto Solutions har købt det det danske CRM-firma Adwiza, der har haft svært ved at opnå tilstrækkelig lønsomhed. Men det skal der laves om på nu, lyder det fra Norge.
White paper
Sådan overvinder man de 5 største udfordringer ved application recovery.
Få svar på hvordan man løser de 5 største udfordringer ved application recovery