Avatar billede lazlowdk Nybegynder
09. december 2004 - 13:32 Der er 16 kommentarer

afkryptering af md5

Ey... jeg bruger funktionen md5() til kryptering af passwords... men hvis nogle af mine brugere har glemt deres passwords vil jeg gerne kunne sende det til dem via mail... men jeg ved ikke hvordan jag afkrypterer passwordet igen...
Avatar billede pham Nybegynder
09. december 2004 - 13:40 #1
md5 er oneway dvs. du kan ikke få dine password igen..

md5 er vist heller ikke en krypterings metode, er det ikke mere en hash generator?
Avatar billede lazlowdk Nybegynder
09. december 2004 - 13:42 #2
hmm.... tjoh.... det er folk lidt uenige om.... kender du nogele andre funktioner der både kan krypteres og afkrypteres??
Avatar billede coderdk Praktikant
09. december 2004 - 13:43 #3
pham, md5 er kryptering, det er blot en underafdeling af kryptering, nemlig hashing, der er envejs :) Det er stadig kryptering, blot uden mulighed for afkryptering ;)

lazlowdk, du kan sende dem et link til en side hvor de kan ændre deres password ;) Det kræver dog lidt sikkerhed ;)
Avatar billede coderdk Praktikant
09. december 2004 - 13:45 #4
lazlowdk, hvis du vil kryptere/afkryptere så kig på mcrypt: http://dk2.php.net/mcrypt
Avatar billede pham Nybegynder
09. december 2004 - 13:45 #5
coderdk, og mange tak. :)
Avatar billede coderdk Praktikant
09. december 2004 - 13:55 #6
Strategien for skift password kan være:

  $username = 'lazlowdk';
  $time = time();
  $secret = 'hemmeligt';
  $checksum = md5( md5( $username . $time ) . $secret );
  $url = "http://dit.site.dk/glemt.php?bruger=$username:$time:$checksum";

$url er så det link du sender til brugeren.

I glemt.php laver du så:

  $param = explode( ":", $_GET['bruger'] );
  if ( count( $param ) != 3 )
  {
    die( "Du kan ikke ændre password." );
  }
  list( $user, $time, $checksum ) = $param;
  if ( $time < ( time() - (30 * 60) ) )
  {
    die( "Du kan kun bruge linket i en 30 minutter!" );
  }
  $secret = 'hemmeligt';
  if ( md5( md5( $user . $time ) . $secret ) != $checksum )
  {
    die( "Du kan ikke ændre password." );
  }
  // Nu må brugeren godt ændre password

Der mangler lidt, men sådan er det generelle princip ;)
Avatar billede coderdk Praktikant
09. december 2004 - 13:59 #7
Når jeg skriver mangler lidt, så er det ikke så meget, glemt.php er bare ikke nok at checke på, du skal også checke på den side glemt.php poster det nye password til ;)
Avatar billede coderdk Praktikant
09. december 2004 - 13:59 #8
Faktisk bør checket ikke være i glemt.php men i den side den poster til ;)
Avatar billede coderdk Praktikant
09. december 2004 - 14:01 #9
glemt.php kan bare være noget i denne stil:

<form method="post" action="glemt.opdater.php">
  <input type="hidden" name="bruger" value="<?= $_GET['bruger'] ?>">
  Nyt password: <input type="password" name="pass1" value=""><br>
  Gentag: <input type="password" name="pass2" value=""><br>
  <input type="submit" value="ændr password">
</form>
Avatar billede lazlowdk Nybegynder
09. december 2004 - 14:37 #10
er det meningen at den IKKE skal kryptere tiden og username??
Avatar billede lazlowdk Nybegynder
09. december 2004 - 14:38 #11
doh... sorø... jeg læste som en røv der...
Avatar billede coderdk Praktikant
09. december 2004 - 15:16 #12
Yep, for de bliver holdt sammen med checksummen, hvis den ikke passer til brugernavn/tid så får man ikke lov ;)
Avatar billede neocron Nybegynder
09. december 2004 - 16:40 #13
Du kan jo eventuelt også sige noget ala:

if((md5($password) == md5($krypteret_password)) {
[...]
Avatar billede coderdk Praktikant
09. december 2004 - 16:52 #14
neocron, hans problem er at brugerne glemmer passwordet ;)
Avatar billede neocron Nybegynder
09. december 2004 - 17:00 #15
Hov, jeg fik vist ikke lige ordentligt fat i spørgsmålet - beklager fejlen :)
Avatar billede haren Nybegynder
10. december 2004 - 15:19 #16
Ellers kan du jo lave et script hvor man skriver brugernavnet og emailen, databasen tjekker om de to infomationer er lig hinanden. hvis de er det ændre du passwordet til et tilfældigt, og derefter sender du en mail med det nye password. Så skal brugeren bare skifte password, når han/hun logger på igen. Ganske sikker måde.

Jeg vil også råde dig til at bruge envejskryptering, da det er mest sikkert. :D
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