webForumDet fria alternativet

Kryptera lösenord

12 svar · 620 visningar · startad av stevenet

stevenetMedlem sedan juni 20001 251 inlägg
#1

Hur krypterar och avkrypterar jag ett lösenord?

------------------
SteveNet
Notera: Funktionen för Signatur är för tillfället påslagen.

woodiMedlem sedan feb. 20001 270 inlägg
#2

Kolla crypt() i PHP manualen.

Eller också Password() i mySQL manualen.

------------------
woodi

Svenska FF1
www.johan-skog.nu

RobbanMedlem sedan dec. 19992 555 inlägg
#3

Bör väl kanske nämnas att crypt() och md5() (som också kan användas - kan t.o.m. vara att föredra) är envägskrypteringar. D.v.s. det går inte att "avkryptera" (dekryptera) någonting krypterat med dessa funktioner.

Men det skall inte gå heller, om man vill ha ett säkert lösenordssystem. Man lagrar lösenordet krypterat. När man skall kolla användarens lösenord så frågar man efter det, kryperar det (med samma "salt") och jämför detta krypterade lösenord med det man har lagrat. Om de stämmer överens så har användaren angett rätt lösenord.

------------------
Robban < robban@lipogram.com >

stevenetMedlem sedan juni 20001 251 inlägg
#4

Tackar! Är det någon som har ett kodexempel?

------------------
SteveNet
Notera: Funktionen för Signatur är för tillfället påslagen.

woodiMedlem sedan feb. 20001 270 inlägg
#5

Denna koden crypterar lösenordet och stoppar in i databasen.

createpassword.php

$password="kalle";
$salt="1zH";
$password=crypt($password, $salt);
mysql_query("update tabellen set password='$password'");

Sen har Du ett inloggningsformulär med bl.a. ett lösenordsfält.

inlogg.php

<?
  if($submit){
    $salt="1zH";
    $Fpassword=crypt($Fpassword, $salt);
    $res=mysql_query("select password from tabellen where user='$Fuser'");
    $row=mysql_fetch_array($res, MYSQL_ASSOC);
    if(mysql_numrows($res)==1){
      if($Fpassword==$row[password])
        echo "Grattis Du har behörighet!";
      else
        echo "Fel lösenord!";
    }else
      echo "Användaren finns inte!";
  }
?>

<html>
<head></head>
<body>
<form action="inlogg.php" method="post">
Användarnamn:<br>
<input type='text' name='Fuser'><br>
Lösenord:<br>
<input type='password' name='Fpassword'><br>
<input type='submit' name='submit' value='Logga in'>
</form>
</body>
</html>

------------------
woodi

Svenska FF1
www.johan-skog.nu

[Redigerat av woodi den 13 aug 2000]

woodiMedlem sedan feb. 20001 270 inlägg
#6

Robban
Hur avkrypterar Du krypteringar som gjorts med Password() i mySQL!? Vad jag vet så går inte detta heller..

------------------
woodi

Svenska FF1
www.johan-skog.nu

RobbanMedlem sedan dec. 19992 555 inlägg
#7

Nope, går inte att dekryptera MySQL's PASSWORD() heller (är som sagt det normala när det gäller lösenord). Inte heller med ENCRYPT(), som är en annan funktion i MySQL.

Appropå ditt exempel. För bästa säkerhet bör man slumpa fram "saltet" och inte använda samma varje gång (normallängden är dessutom två tecken - ditt sista tecken kommer att slängas bort helt enkelt). För att senare veta vilket "salt" som användes för ett specifikt lösenord så tittar man på de två första tecknen i det krypterade lösenordet (om DES används för krypteringen).

Lite osäker på om crypt() fungerar på alla system (Win32 t.ex.)? Tror inte det? Var därför jag skrev att md5() kan vara att föredra (även om MD5 egentligen inte är avsedd till detta - har dock mindre praktisk betydelse). För md5() vet jag fungerar på Win32 (om man nu bryr sig om Win32-kompatibilitet ö.h.t.).

------------------
Robban < robban@lipogram.com >

nanneMedlem sedan dec. 19991 749 inlägg
#8

Crypt(); funkar icke på win32. Satt hela helgen och slet i mitt hår för att jag inte fick det att funka. Förbannat att man inte kan ge sina användare större säkerhet pga att webhotellet kör windows.

------------------
Vackra djur gör fula saker även dom

nanne.net

woodiMedlem sedan feb. 20001 270 inlägg
#9

Robban
Så sant så sant.. Men ett exempel script efterfrågades och jag slängde ihop ett lite snabbt.. Lite får väl personerna ifråga göra själva! ;)

------------------
woodi

Svenska FF1
www.johan-skog.nu

stevenetMedlem sedan juni 20001 251 inlägg
#10

Hur slumpar man fram "saltet"?

------------------
SteveNet - stevenet@webmarkit.net

woodiMedlem sedan feb. 20001 270 inlägg
#11

Kolla srand() och rand() i phpmanualen.

------------------
woodi

Svenska FF1
www.johan-skog.nu

MattiMedlem sedan dec. 19996 592 inlägg
#12
$verify="38fe8951595f01a3c16f3d50ea0bcc53";
$password=md5($losenord);
if($password==$verify)
echo "blablabla";

Tillräckligt säkert för ett admin-system för en gästbok?

------------------
fint.

RobbanMedlem sedan dec. 19992 555 inlägg
#13

nanne:

Du kan använda md5(). Ger i stort sett lika bra säkerhet som crypt() och skall fungera på Win32.

Matti:

Japp, det tycker jag. Problemet (om man nu skall kalla det så) med md5() är att det egentligen inte är en krypteringsalgoritm utan en s.k. "message digest". Innebär i klartext att det finns flera indata som ger samma utdata. Detta är ju inte så bra när det gäller en lösenordsfunktion, men chansen att detta skall ställa till med problem är i stort sett obefintlig.

Sedan är ett annat "problem" att PHPs md5() inte använder "salt" som crypt() gör, vilket sänker säkerheten en del. Men detta får man leva med om man vill att sidan skall vara Win32-kompatibel. Säkerheten blir bra nog för de flesta tillämpningar.

------------------
Robban < robban@lipogram.com >

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)