Jag har en fråga angående kryptering av användar data.
Mina användare kommer att spara känslig information och jag själv anser att detta då borde vara krypterat för användarens bästa. Men frågan är hur det skall gå till för att bli så säkert som möjligt.
Jag har ingen tidigare erfarenhet av kryptering av data i php.
Min första känsla av hur man kan göra är att man krypterar allting i databasen med hjälp av användarens egna lösenord, vilket är något ingen annan känner till eller som finns sparat på sidan/servern/databasen då detta bara sparas med hjälp av MD5+salt.
Själva funktionen för kryptering är jag inte helt säker på vad som är smidigast, eller säkrast.
Men några tips och förslag vore bra så jag kan undgå att klanta till det :stud
Vad använder du för dbms? Eftersom att vi hamnade i PHP-forumet gissar jag på MySQL. MySQL har en inbyggd funktion för SHA, närmare bestämt SHA1(). Som salt brukar jag använda en slumpad sträng på runt 6 tecken som lagras i databasen, samt två statiska tecken som läggs till i koden på saltet. Ett exempel:
Tabellen Users har fyra fält: UserId, UserName, UserPwd, UserSalt.
Vi har två funktioner i PHP, den ena skapar ett lösenord och den andra ett salt:
SHA1 funktionen kanske är något att kolla på då ja.
Är jag helt fel ute om jag tycker att det verkar osäkert att ha userSalt inskrivet i databasen? Vist, om de som kommer åt databasen bara kommer åt den och inte koden över hur jag har krypterat databasen, så är det nog inte så farligt.
Dock, vad jag kom att tänka på att man kan använda som kryptering sträng är ett MD5 (eller liknande) utav användarID och användar lösen. Så när någon byter lösenord så generars krypteringssträngen om och datan krypteras om till den nya strängen.
Nej, det är inte bättre. Det är bättre att ha ett separat salt som inte beror på något annat fält i databasen. På så sätt skyddar man sig bättre mot regnbågstabeller, eftersom att färre regnbågstabeller behövs när "inbrytaren" inser att hashen enbart beror på ett annat fält i tabellen.
MySQL har även en MD5()-funktion, den fungerar bra den också.
Nu måste vi hålla isär begreppen här...
En kryptering går att avkryptera med en nyckel. En hash (MD5, SHA1 mfl...) går ej att avläsa.
Vill du kryptera eller hasha informationen?
Dvs. ska användarna kunna läsa informationen igen?
Allt beror på vad det är för typ av data.
Är det lösenord så är det hash du ska använda.
Helt riktigt Troxy. Kryptering sker (oftast) på själva kopplingen mellan klient och server, via SSL. Lösenord hashar man, endast persistent data ska krypteras. (I det här fallet tyckte jag att det var uppenbart att det var hash som det var fråga om :))
(I det här fallet tyckte jag att det var uppenbart att det var hash som det var fråga om :))
Hehe hoppas att jag inte uppfattades som en besserwisser. :e
Jag blev bara orolig ifall startail ville kryptera ex. inlägg eller artiklar och började göra om textmassor till MD5-strängar. Då hade det blivit tråkigt :P
Åh, jag läste inte riktigt riktigt - jag fick intrycket av att du ville lagra lösenord i databasen på ett säkert sätt. Sorry!
Tyvärr stödjer inte PHP per default någon två-vägs krypteringsalgoritm - men om du har kontroll själv över servern eller kan åtminstone påverka vilka extensions till PHP som finns tillgängliga rekommenderar jag att kompilera om PHP med MCrypt. I och med färdiga funktioner för mcrypt i PHP rekommenderar jag det framför Fredde Mannens förslag, som använder tredjeparts programvara genom shell-använding.