tobrukDk Praktikant
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 Praktikant
20. november 2012 - 12:20 #2
Kan jeg ikke også bare gøre sådan her;


$password = 'mypassword';
$hash = crypt($password);
tobrukDk Praktikant
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 Praktikant
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 Praktikant
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 Ekspert
20. november 2012 - 21:07 #7
SHA-1 er foraeldet idag. Brug SHA-256.
arne_v Ekspert
20. november 2012 - 21:08 #8
Det er meget vigtigt at bruge forskelligt salt for hver bruger.
tobrukDk Praktikant
20. november 2012 - 22:49 #9
arne_v Ekspert
20. november 2012 - 22:57 #10
Det er vist funktionen til SHA-256 i PHP.
tobrukDk Praktikant
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 Ekspert
22. november 2012 - 04:12 #12
Hvorfor pokker gaa efter en ikke optimal loesning??
tobrukDk Praktikant
22. november 2012 - 13:05 #13
Hvad skal jeg så tag?
arne_v Ekspert
22. november 2012 - 20:10 #14
forskellig salt per bruger og SHA-256 evt. med flere iterationer
tobrukDk Praktikant
23. november 2012 - 06:27 #15
okay, men hvor kan jeg finde det hen?
arne_v Ekspert
24. november 2012 - 02:03 #16
finde hvad??
tobrukDk Praktikant
25. november 2012 - 00:57 #17
ligemeget, jeg har klart det, jeg fandt en video på youtube omkring det :)
tobrukDk Praktikant
26. november 2012 - 10:28 #18
Arne_v og The_Buzz ligge et svar?
tobrukDk Praktikant
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
WannaCry-helt angrebet af hævntørstige hackere - men det største problem var faktisk politiet
Sikkerhedseksperten Marcus Hutchins stoppede ved et tilfælde spredningen af WannaCry og blev berømt i hele verden. Siden er han både blevet angrebet af hackere og har fået servere lukket af politiet.
CIO
Bliv klar til EU-persondataforordningen: Ministerium klar med længe ventet dansk vejledning til den nye EU-lov
Justitsministeriet er efter en måneds forsinkelse klar med den store vejledning til EU's kommende persondataforordning, der kommer til at få konsekvenser for alle danske virksomheder. Se vejledningen her.
Comon
Microsofts vilde - og hammerdyre - Surface Studio kommer til Danmark
Microsofts all-in-one-computer, Surface studio, kommer til Danmark midt i juni til en vild pris
Job & Karriere
Dansk it-firma masseansætter: Skal bruge 90 nye medarbejdere med disse it-profiler
It-virksomheden BEC skal bruge 90 nye it-medarbejdere. Her kan du se de konkrete it-profiler, BEC er på udkig efter.
White paper
Undgå de syv dødssynder i valget af ERP-partner
I dette whitepaper kan du læse mere om de syv hyppigste 'dødssynder' og om, hvordan du imødegår dem. Dette er nyttig viden at have med sig, uanset hvilken platform og partner din virksomhed i sidste ende vælger at satse på.