Behöver hjälp med detta. Hur funkar det ? Hur man skriver när man sparar till databasen. Hur man gör gör att ex logga in på en sida med sitt lösenord m.m
Hittar bara sha1 med php eller asp.net när jag söker. Funkar det inte med asp?
SHA1 och MD5 finns inte som standard till ASP. Det finns http://rossm.net/Electronics/Computers/Software/ASP/#MD5 för md5 en funktion som bygger om strängar till md5. Och visst går det att använda SHA1 (om du hittar det) och MD5 för att logga in en användare (md5 exempel):
Du sparar ner lösenordet i databas med md5 så du har md5 texten i din databas(ordet test blir : 098f6bcd4621d373cade4e832627b4f6 och det är den datan vi har i databasen). Sen när du ska se att användaren har angett rätt lösenord kör du (sql):
SELECT * FROM Users Where username = '" & username & "' and password = '" & md5(Request.Form("password") & "'"
En del databaser har inbyggda hashfunktioner, MySQL är ett exempel.
Beträffande salt är det en slumpmässig sträng av godtyckliga tecken som du hakar ihop med resten av indatan till hashen (dvs lösenordet) för att försvåra ordboksattacker, där man jämför en hash mot förgenererade hashar av sannolika lösningar. Saltet måste alltså sparas, och helst har du olika salt för alla lösenord. Du slumpar då fram saltet när användaren skapas, och sen rimligen varje gång användaren byter lösenord.
Ett exempel med saltad SHA1 i MySQL skulle kunna vara:
select * from users u where u.password_sha1 = SHA1(CONCAT('lösenord', u.salt))
... där det hashade lösenordet ligger i users.password_sha1 och saltet finns i users.salt.
Men hur sparar jag ner eller uppdaterar med detta?
nåt sånt här? Men funkar inge bra:
strSalt = getSalt(15)
strPwd = "mittlösenord"
Conn.Execute("UPDATE tbl SET losen=SHA1(CONCAT(strPwd,strSalt)),sha1='" & strSalt & "' WHERE userID= 1")
Tänkte använda denna slumpgeneratorn för saltet.
Function getSalt(ByVal intLength)
If intLength < 0 Then intLength = 8
Dim strChars, i, strPass, intRnd
strChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!¤%?}][{$£@½§s"
For i = 1 To intLength
Randomize
intRnd = CInt(Rnd() * (Len(strChars)-1)) + 1
strPass = strPass & Mid(strChars, intRnd, 1)
Next
getSalt = strPass
End Function
Vad jag har fått uppfattning över "saltet" skall inte det vara specifict från projektet ? Som ingen kommer åt? Eller ska den vara unik per användare?
Ett unikt per användare ska du ha för att få maximal effekt mot regnbågsattacker.
En annan bra grej är att ha ett statiskt extra salt i koden, ifall någon skulle komma in i databasen och sno hash+salt.
Troxy skrev:
Alltså vad är meningen med att salta om man ändå sparar saltet i klartext? :P
Poängen är att en angripare inte kan jämföra färdiga hashvärden mot hasharna i databasen. Utan måste generera nya värden med salten. Det tar tid.
En angripare har en lista med färdiga hashvärden för vanliga lösenord, tex "power". Med ett salt så måste han skapa nya värden och jämföra dom nya värdena med dina hashar. Med salt för varje användare så måste angriparen skapa nya hashvärden för varje användare. Med ett extra salt i koden (som angriparen inte vet om) så gör han allt förjäves. :)