Avatar billede kack Nybegynder
09. december 2004 - 19:49 Der er 32 kommentarer og
1 løsning

kryptering af password?

Jeg har fået lavet mig et lille community. Men når en bruger opretter en bruger, er det så uheldigt at jeg kan se personens password i mysql databasen.

Hvordan kan man lave så jeg ikke kan det? Og det f.eks bliver skiftet ud med: srd3247238372dfnw i mysql databsen (Et eksempel).

På forhånd tak!
Avatar billede evilhoppemis Nybegynder
09. december 2004 - 19:52 #1
md5($dinvar); mener jeg det er men det er ihverfald md5 du skal bruge se evt på www.phnet/md5
Avatar billede evilhoppemis Nybegynder
09. december 2004 - 19:53 #2
Avatar billede Slettet bruger
09. december 2004 - 19:54 #3
$password = "hemmeligt!";
$password_krypteret = md5($password);
echo $password; //Outputter: 86e84f55bcbbc11bb4361f6b1a71a9eb
Avatar billede kack Nybegynder
09. december 2004 - 19:55 #4
Fatter ikke helt så meget af det der php.net :S

EN der kan fortælle mig hva jeg skal sætte ind i denne kode for at det virker?

<?
$connection = mysql_connect("''''''","''''''","''''''");
mysql_select_db("''''''", $connection);

$q = mysql_query("SELECT * FROM brugere where bruger='{$bruger}'") or die (mysql_error());
if (mysql_num_rows($q) == 1){
echo "Der findes allerede en bruger med navnet: \"$bruger\"";
}
else {
mysql_query("INSERT INTO brugere (bruger, kodeord, email, kon, alder, city, landsdel) VALUES ('{$bruger}', '{$kodeord}','{$email}','{$kon}','{$alder}','{$city}','{$landsdel}')") OR DIE (mysql_error());
echo "Bruger oprettet";
}
mysql_close();
?>
Avatar billede Slettet bruger
09. december 2004 - 19:56 #5
MD5 er envejskryptering. Dvs. du kan kun kryptere dit password, ikke dekryptere. Så når du skal kontrollere dit password skal du kryptere inputtet og sammenligne det med det krypterede password i databasen!
Avatar billede Slettet bruger
09. december 2004 - 19:56 #6
<?
$connection = mysql_connect("''''''","''''''","''''''");
mysql_select_db("''''''", $connection);

$q = mysql_query("SELECT * FROM brugere where bruger='{$bruger}'") or die (mysql_error());
if (mysql_num_rows($q) == 1){
echo "Der findes allerede en bruger med navnet: \"$bruger\"";
}
else {
mysql_query("INSERT INTO brugere (bruger, kodeord, email, kon, alder, city, landsdel) VALUES ('{$bruger}', '{md5($kodeord)}','{$email}','{$kon}','{$alder}','{$city}','{$landsdel}')") OR DIE (mysql_error());
echo "Bruger oprettet";
}
mysql_close();
?>
Avatar billede Slettet bruger
09. december 2004 - 19:57 #7
du kan evt. lave en strtolower() inden du krypterer det og inden du sammenligner inputtet i logind funktionen. Så er det nemlig ligemeget med store/små bogstaver..
Avatar billede kack Nybegynder
09. december 2004 - 20:00 #8
Sorry.. Men har ikke helt vildt meget forstand på php :S

Men når jeg så har oprettet en bruger med passwordet: test. Så kommer der dette ind i mysql databsen:

{md5(test)}

kan man ikke lave det mere sikkert?
Avatar billede googolplex Novice
09. december 2004 - 20:02 #9
Så er der noget galt, der skal være en streng på 32 tegn.
Avatar billede Slettet bruger
09. december 2004 - 20:02 #10
Jo :) Det var en fejl.

Lav din SQL-query sådan her i stedet:

"INSERT INTO brugere (bruger, kodeord, email, kon, alder, city, landsdel) VALUES ('".$bruger."', '".md5($kodeord)."','".$email."','".$kon."','".$alder."','".$city."','".$landsdel."')"

Prøv så at oprette en bruger og kig i databasen :)
Avatar billede kack Nybegynder
09. december 2004 - 20:03 #11
Ved du hvad der er galt så?
Avatar billede googolplex Novice
09. december 2004 - 20:03 #12
<?
$connection = mysql_connect("''''''","''''''","''''''");
mysql_select_db("''''''", $connection);

$q = mysql_query("SELECT * FROM brugere where bruger='{$bruger}'") or die (mysql_error());
if (mysql_num_rows($q) == 1){
echo "Der findes allerede en bruger med navnet: \"$bruger\"";
}
else {
$md5 = md5($kodeord);
mysql_query("INSERT INTO brugere (bruger, kodeord, email, kon, alder, city, landsdel) VALUES ('{$bruger}', '{$md5}','{$email}','{$kon}','{$alder}','{$city}','{$landsdel}')") OR DIE (mysql_error());
echo "Bruger oprettet";
}
mysql_close();
?>
Avatar billede googolplex Novice
09. december 2004 - 20:04 #13
Du kan også bruge sha1() i stedet for md5(), den er lidt langsommere, men mere sikker (ikke at det betyder noget), da den returnerer en streng på 40 tegn.
Avatar billede Slettet bruger
09. december 2004 - 20:05 #14
googolplex -> Ved du godt hvor sikker md5 krypterede passwords er? :)
Avatar billede kack Nybegynder
09. december 2004 - 20:07 #15
Nu virker det da i databasen.. Men hvorfor bliver den ved med at sige forkert password når man prøver at logge ind nu?

Men tak for hjælpen ind til videre!
Avatar billede Slettet bruger
09. december 2004 - 20:08 #16
Det er fordi du OGSÅ skal kryptere det password som brugeren sender under login :) (med MD% selvf)
Avatar billede kack Nybegynder
09. december 2004 - 20:11 #17
F.eks.:

$result_pw = mysql_query("select .md5($kodeord) from brugere where kodeord = '$kodeord'")

eller hvad?
Avatar billede Slettet bruger
09. december 2004 - 20:13 #18
Nej:

$result_pw = mysql_query("SELECT * FROM brugere WHERE kodeord = '".md5($kodeord)."'")
Avatar billede kack Nybegynder
09. december 2004 - 20:20 #19
Det virker stadig ikke helt.. Dette er min kode i login-ok.php :

<?php
$connection = mysql_connect("****","****","****");
mysql_select_db("****", $connection);

$login = &$HTTP_POST_VARS['login'];



if(empty($login)) {

    echo 'Denne side kræver login adgang'; }

    else {



$bruger = &$HTTP_POST_VARS['bruger'];

$kodeord = &$HTTP_POST_VARS['kodeord'];





if(empty($bruger) OR empty($kodeord)) {

    echo 'Et af felterne er tomme'; }   

    else {





$connection = mysql_connect("****","****","****");
mysql_select_db("****", $connection);





$result_user = mysql_query("select bruger from brugere where bruger = '$bruger'")

or die (mysql_error());



$result_pw = mysql_query("SELECT * FROM brugere WHERE kodeord = '".md5($kodeord)."'")

or die (mysql_error());

 



$array_user = mysql_fetch_array($result_user);

$array_pw = mysql_fetch_array($result_pw);



if($array_user['bruger'] == $bruger AND $array_pw['kodeord'] == $kodeord) {

  echo 'korrekt kodeord';

}
else {
echo 'forkert kodeord';
}
}
}

?>
Avatar billede Slettet bruger
09. december 2004 - 20:25 #20
Tror du vil få mere ud af at skrive:

"SELECT * FROM brugere WHERE kodeord = '".md5($kodeord)."' AND bruger='".$bruger."'" og så checke med mysql_num_rows()..
Og derudover kan det da betale sig at bruge $_POST til at hente dine variabler i stedet for &$HTTP_POST_VARS['login'] som er 'håbløst forældet'.

Men hvis du vil holde dig til dit nuværende script skal du rette
if($array_user['bruger'] == $bruger AND $array_pw['kodeord'] == $kodeord)

til
if($array_user['bruger'] == $bruger AND $array_pw['kodeord'] == md5($kodeord))
Avatar billede Slettet bruger
09. december 2004 - 20:26 #21
Jeg kan godt lave et eksempel på hvad jeg mener mysql_num_rows() metoden?
Avatar billede kack Nybegynder
09. december 2004 - 20:28 #22
Holder mig til det jeg har nu.. MANGE GANGE tak for hjælpen!

Giver points til gartzen, for det er dig der har hulpet mig!
Avatar billede kack Nybegynder
09. december 2004 - 20:29 #23
Men det må du da godt :)

Kunne godt være jeg skulle udskifte det så :)
Avatar billede Slettet bruger
09. december 2004 - 20:37 #24
$connection = mysql_connect("****","****","****");
mysql_select_db("****", $connection);
$result = mysql_query("SELECT * FROM brugere WHERE kodeord = '".md5($kodeord)."' AND bruger='".$bruger."'");
if (mysql_num_rows($result) == 1) {
  echo "Korrect kodeord";
}

og hvis du så udskifter alt &$HTTP_POST_VARS[] med $_POST[], så kan man da se dit script ikke HELT er fra bronzealderen ;)
Avatar billede kack Nybegynder
09. december 2004 - 20:46 #25
Sådan!

NU ser min kode sådan ud:

<?php
$connection = mysql_connect("'''","'''","'''");
mysql_select_db("'''", $connection);

$login = $_POST['login'];



if(empty($login)) {

    echo 'Denne side kræver login adgang'; }

    else {



$bruger = $_POST['bruger'];

$kodeord = $_POST['kodeord'];





if(empty($bruger) OR empty($kodeord)) {

    echo 'Et af felterne er tomme'; }   

    else {





$connection = mysql_connect("'''","'''","'''");
mysql_select_db("'''", $connection);





$result_user = mysql_query("select bruger from brugere where bruger = '$bruger'")

or die (mysql_error());



$result_pw = mysql_query("SELECT * FROM brugere WHERE kodeord = '".md5($kodeord)."'")

or die (mysql_error());

 



$array_user = mysql_fetch_array($result_user);

$array_pw = mysql_fetch_array($result_pw);



$result = mysql_query("SELECT * FROM brugere WHERE kodeord = '".md5($kodeord)."' AND bruger='".$bruger."'");
if (mysql_num_rows($result) == 1) {
  echo "Korrect kodeord";
}
else {
echo 'forkert kodeord';
}
}
}

?>

___

Var det bedre? :D
Avatar billede Slettet bruger
09. december 2004 - 20:54 #26
Forresten connecter du 2 gange til databasen...
Måske kan du finde lidt inspiration in the way i would had done it:

<?php
if(empty($_POST['login'])) {
  echo "Denne side kræver login adgang";
} else {
  if(empty($_POST['bruger']) || empty($_POST['kodeord'])) {
    echo 'Et af felterne er tomme';
  } else {
    $connection = mysql_connect("****","****","****");
    mysql_select_db("****", $connection);
    $result = mysql_query("SELECT * FROM brugere WHERE kodeord = '".md5($_POST['kodeord'])."' AND bruger='".$bruger."'");
    if (mysql_num_rows($result) == 1) {
      echo "korrekt kodeord";
    } else {
      echo "forkert brugernavn eller kodeord";
  }
  }
}
?>
Avatar billede Slettet bruger
09. december 2004 - 20:56 #27
Derudover ville jeg også have conveteret password og brugernavn til små bogstaver, både i databasen og ved inputtet i selve loginet...
Avatar billede kack Nybegynder
09. december 2004 - 21:01 #28
hva mener du?
Avatar billede Slettet bruger
09. december 2004 - 21:04 #29
Din SQL-sætning som opretter en ny bruger skal så laves om til:
"INSERT INTO brugere (bruger, kodeord, email, kon, alder, city, landsdel) VALUES ('".$bruger."', '".md5(strtolower($kodeord))."','".$email."','".$kon."','".$alder."','".$city."','".$landsdel."')"

Og i loginscriptet skal du lave en
$_POST['kodeord'] = strtolower($_POST['kodeord']);
lige inden SQL-queryen..

Så ungår man fejl med store/små bogstaver..
Avatar billede kack Nybegynder
09. december 2004 - 21:16 #30
Jeg siger igen rigtig mange gange tak for hjælpen!!

I kan se det jeg har fået lavet ind til videre på www.kack.dk/kackcommunity ;)
Avatar billede Slettet bruger
09. december 2004 - 21:18 #31
Det var så lidt, kack. :D
Jeg elsker at hjælpe folk der vil hjælpes, så tak for det ;o)
Avatar billede kack Nybegynder
09. december 2004 - 21:19 #32
hehe :P
Avatar billede googolplex Novice
09. december 2004 - 22:01 #33
gartzen: men mere sikker (ikke at det betyder noget) - Jep ;)
Avatar billede 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. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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