webForumDet fria alternativet

kryptering?

11 svar · 254 visningar · startad av greymane

greymaneMedlem sedan juli 2001711 inlägg
#1

om jag ska skicka ett lösenord till en mysqldb, så har jag förstått att det är bra att kryptera infon. hur gör man det på ett lämpligt sätt? jag har läst manualen, fast jag blir inte klok på det. hur gör man?

spangoMedlem sedan juni 20008 205 inlägg
#2

ENCRYPT eller PASSWORD:
http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Miscellaneous_functions

ENCRYPT torde dock bara funka på *NIX-system.

------------------
Before you criticize someone, walk a mile in his shoes. That way, if he gets angry, he'll be a mile away - and barefoot.

[Redigerat av spango den 20 jan 2002]

spangoMedlem sedan juni 20008 205 inlägg
#3

Ett litet tillägg, om du kör med ENCRYPT, använd då användarnamnet som "salt" till lösenordet. Det blir jobbigare att brute force-cracka då :)

------------------
Before you criticize someone, walk a mile in his shoes. That way, if he gets angry, he'll be a mile away - and barefoot.

peronetMedlem sedan sep. 200193 inlägg
#4

använd denna:

$cpwd = crypt( $password, "ty" );
Den ska fungera bra vettu.. tror den e bäst..

------------------
.... Weii

spangoMedlem sedan juni 20008 205 inlägg
#5

Fast det är inge bra att binda innehållet i databasen till en funktion i ett programmeringsspråk... använd de funktioner som finns i MySQL. Och det där jag sa om salt var bara skitsnack (tror jag...).

------------------
Before you criticize someone, walk a mile in his shoes. That way, if he gets angry, he'll be a mile away - and barefoot.

peronetMedlem sedan sep. 200193 inlägg
#6

Jag rekomenderar ändå crypt ovan.

Då det är ganska säkert att inte kunna kryptera upp ett lösenord, ska man kolla om det stämmer så krypterar man bara strängen man vill jämföra med och kollar om de är lika, annars är det fel.. :P

Är det så att någon glömmer lösenordet så får man helt enkelt byta..

Ganska bra att ha det såhär om någon nu skulle komma åt registret så kan ingen se vilka lösenord som används...

------------------
.... Weii

greymaneMedlem sedan juli 2001711 inlägg
#7

så för att lägga in ett lösenord i dbn skriver jag:

$cpwd = crypt( $password, "ty" );

och för att jämföra med lösenordet som användaren skriver in vid inloggning skriver jag typ:

if ($cpwd == crypt($anv_pwd, "ty") {
   echo "Rätt lösen"
}
else {
   echo "Fel lösen"
}

kan det va nåt?

ChavezMedlem sedan maj 20001 953 inlägg
#8

Krypt fungerar inte på Windows om jag inte har fel?
Varför inte använda en enkel md5()? Det tycker jag borde ge tillräcklig säkerhet?

------------------
<A HREF="mailto:chavez@post.netlink.se">Mvh Chavez
</A> UIN: 73975020

Sveriges PHP-portal nr 1!

greymaneMedlem sedan juli 2001711 inlägg
#9

jag kör linux, så jag använder gärna crypt(). men hur gör man?! :)

spangoMedlem sedan juni 20008 205 inlägg
#10

Jag rekomenderar ändå crypt ovan.
Jag rekommenderar att man använder ENCRYPT eller PASSWORD i MySQL :) ENCRYPT använder sannolikt samma algoritm som crypt i php (eftersom de bestäms av det underliggande systemets krypteringsalgoritm), så de är lika säkra, men man slipper alla de problem man riskerar om man binder databasen till ett visst programmeringsspråk på en viss plattform. Tilläggas bör att PASSWORD är den algoritm som används för att kryptera lösenorden i de tabeller som MySQL använder för att hålla reda på rättigheterna, så den lär inte vara helt kass den heller. Exempel:

$userName = "barbapappa";
$passwd = "skumgummi";

$conn = mysql_connect('localhost', 'foo', 'bar');
mysql_use_db('hemlisar');

$insert = "INSERT INTO user (u_name, u_passwd) VALUES ('$userName', PASSWORD('$passwd'))";
mysql_query($insert);

$search = "SELECT * FROM user WHERE u_passwd = PASSWORD('$passwd') AND u_name = '$userName'";
$result = mysql_query($search);
$row = mysql_fetch_object($result);

if(!$row){
echo "Felaktig inloggning"; // lösen eller anvnamn är fel
} else {
echo "Välkommen $row->u_name";
}

PASSWORD ovan går utmärkt att byta ut mot ENCRYPT: INSERT INTO user (u_name, u_passwd) VALUES ('$userName', ENCRYPT('$passwd', 'ty')). Observera att båda algoritmerna är "enkelriktade", så det går inte att dekryptera ett lösenord (inte utan brute force-cracking).

------------------
Before you criticize someone, walk a mile in his shoes. That way, if he gets angry, he'll be a mile away - and barefoot.

[Redigerat av spango den 21 jan 2002]

spangoMedlem sedan juni 20008 205 inlägg
#11

Förresten, bara så du vet så ger PASSWORD alltid ett resultat på 32 tecken (varför CHAR(32) är en lämplig datatyp för lösenordskolumnen) - förutsatt att jag nu minns rätt ;)

------------------
Before you criticize someone, walk a mile in his shoes. That way, if he gets angry, he'll be a mile away - and barefoot.

oelbalMedlem sedan jan. 20014 973 inlägg
#12

Fast det är inge bra att binda innehållet i databasen till en funktion i ett programmeringsspråk... använd de funktioner som finns i MySQL. Och det där jag sa om salt var bara skitsnack (tror jag...).

Helt rätt, det känns som om du går omvägen via PHP, när det du söker redan finns i MySQL.

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