I en script som jag håller på med så vill jag att ett mail skall gå ut till de registrerade användarna, med en länk innehållande typ: https://www.blabla.com/login.php?user=userName&pass=XXXXXXX
där XXXXXXX skall vara ett krypterat lösenord. Jag har kollat på en del grejer om hur jag skall få det att funka, men kommer inte på något bra sätt riktigt...
För om jag skulle använda mig av md5 så skulle jag vara tvungen att spara alla lösenord i databasen som md5 för att kunna köra en kontroll, och sparar jag det som md5 så kan jag ju inte ta fram det "riktiga lösenordet", eller hur...
Finns det något bra sätt, behöver inte vara av NASA säkerhet, som gör att jag både kan koda och avkoda ett lösen?
Skriv en egen algoritm, det är det bästa - eller använd en tredjeparts via exec(). Om du använder ett skrivet i PHP finns risken att andra kan dekryptera det med samma algoritm, då de ser att du använder PHP.
Men det är egentligen inte något stort problem att andra kan dekryptera det, jag vill bara inte att det skall skickas ut som plain text... Men om man skriver en egen algorimt, det är ju jobbigt juh! *suck*
Skulle man kunna göra så att när man kollar inloggningen först plockar ut det username som användaren har, konverterar lösenordet till md5 och sedan jämför det med det skickade lösenordet? Det låter som en ganska smart lösning på problemet, ingen kan väl decoda md5'an? Fast å andra sidan så sparas lösenordet som plain text i databasen vilket kanske inte är så säkert...
Ok, då skulle jag använda MD5() - om det inte behöver vara så säkert. :)
Lagra lösenordet krypterat, antingen med MD5() eller MySQLs PASSWORD()-funktion. Tappas ett lösenord bort, skicka ett nytt lösenord som användaren sen kan ändra.
Hm... fast det kommer ändå inte funka som jag vill då... Jag vill följande:
1. snubben får ett mail med en länk, länken loggar honom automatiskt in på siten.
2. Han får ett litet fint meddelande som säger att han är välkommen å en massa annat tjafs, sedan så står hans användarnamn och lösen där så han kan logga in igen.
Å då går det inte att ha lösenordet krypterat i databasen... eller?
Vänta nu, MySQL har väl funktionerna CRYPT() och DECRYPT()? Med dom kanske du skulle kunna trolla lite... Ska kolla i MySQL-manualen för säkerhetsskull, så att jag inte sitter här och ljuger. ;)
ENCODE(str,pass_str)
Encrypt str using pass_str as the password. To decrypt the result, use DECODE(). The results is a binary string of the same length as string. If you want to save it in a column, use a BLOB column type.
DECODE(crypt_str,pass_str)
Descrypts the encrypted string crypt_str using pass_str as the password. crypt_str should be a string returned from ENCODE().
Det vet jag faktiskt inte. Du kan ju alltid använda TINYBLOB i så fall, det är ju en kolumntyp av typen BLOB ( Kan lagra upp till 255 tecken, samma som VARCHAR alltså ) och är den "minsta" kolumntypen av BLOBarna.