![]() |
Hej, har efter mycket om och men kommit fram till följande lösning för att hasha användares lösenord:
Kod:
$pwd = 'användarens lösenord'; |
|
Citat:
länkar: http://en.wikipedia.org/wiki/HMAC http://se2.php.net/hash_hmac http://en.wikipedia.org/wiki/SHA_has...ions#SHA_sizes efter att ha läst den infon så har jag fått för mig att den här lösningen är säkrare än den förstnämnda? men som sagt, jag är inte allvetande.. |
Kod:
md5(salt-på-100-random-chars + användarnamn + lösenord + salt-på-100-random-chars) |
Att sedan skriva ut hur man gör är ju inte så bra om man skall vara petig...
|
Här har du en variant på ett login+registrerings system som jag gjort...ett väldigt väldigt simpelt sådan...
register.php Kod:
<?php Kod:
<?php Kod:
<?php EDIT* Såg att jag glömt fixa så att INPUT kör genom prepared... men det ska det. |
Citat:
|
Citat:
Mest hashnings-förfarandet jag va ute att få kommentarer på, då jag inte sett många som använt något liknande. |
Varför ens köra Base64 ??? :S
Base64 kännetecknas enkelt på att det OFTAST är 2st likamed tecken på slutet. Vilket gör det relativt enkelt för hackern när han får tag i dina lösenord och därmed mer eller mindre har lösenordet i klartext. EN utav nackdelen med base64 är helt enkelt att varje tecken "väger mer". Citat:
|
Vet inte om det bara är jag men det ser ut som din applikation är väldigt sårbar för sql injections...
register.php Kod:
$in_user Kod:
$in_user |
Citat:
anledningen till att jag kör base64_encode på det är för att få det i ett format som går att använda vettigt oberoende av vilket charset jag får för mig att använda i databasen.. Kod:
$pwd = 'hej'; bp7TOwYAEtNUXV0jTcoJxRqQ0gBhflcqOABRP2t8VnPxwEmRuG H+Dl1BmEX2VwX6bT2I0rzHSXYv1HcajDT9Rw== nžÓ;ÓT]]#MÊ Å?Òa~W*8Q?k|VsñÀI‘¸aþ]A˜EöWúm=ˆÒ¼ÇIv/ÔwŒ4ýG så att de skulle få mitt lösenord i klartext genom att jag använder base64_encode ställer jag mig ytterst tveksam till... NOTERA: fortfarande inte hela systemet, utan bara hash-lösningen som jag kör med... tänker inte skriva ut hela heller :P |
[/QUOTE]
Citat:
Som jag skrev i edit så har jag glömt uppdatera SQL inputen till prepared. Man kan sen utköka de script jag skickade med mer säkerhet... men det va inte det som diskutterades här. Läs mer här (php.net) Citat:
|
Citat:
Kod:
$pass = base64_encode(hash_hmac,'sha512',$pwd,hash_hmac('sha512',$dynsalt1,$dynsalt2,true),true)); Citat:
MySQL lagrar datat i det format du väljer att spara det som. Du kan lagra UTF-8 i en Latin1 tabell utan problem, problemet dyker upp först när du skall läsa datat i någon mysql klient, men skriver du ut det på en websida så har du inga problem sålänge sidan visas i UTF-8. Mao base64 är bara något värdelöst, räcker att datat i mysql är samma som datat du får ifrån användaren så fungerar det. |
Citat:
Kod:
$pass = base64_encode(hash_hmac,'sha512',$pwd,hash_hmac('sha512',$dynsalt1,$dynsalt2,true),true)); Kod:
$pass = base64_encode(hash_hmac('sha512',$pwd,hash_hmac('sha512',$dynsalt1,$dynsalt2,true),true)); string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output ] ) 'sha512' => algoritmen som används $pwd = användarens lösenord $dynsalt1 och $dynsalt2 är helt skilda från varandra, och unika för varje användare. men men.. du menar alltså att base64_encode() skulle sabba hela funktionen? |
Citat:
Har du en specifik längd (md5 = 32tecken, sha1 = 40tecken osv) så hade jag satsar på en varbinary (som varchar fast för binär data) eller någon blob istället. Båda 2 är casesensitiv vilket jag misstänker är kritiskt för dig samt har inget med charset att göra. |
Citat:
Förutom min min blunder gällande det, vad tycker du om själva sättet att hasha på? |
Citat:
Att Base64-encoda en hash tar mindre plats att lagra i en databas än hex-encodad hash. Exempel: raw MD5 = 16 tecken base64 MD5 = ca 25 tecken hexadecimal MD5 = 32 tecken |
Citat:
base64 = 88 tecken binärt = 64 tecken |
Citat:
|
Citat:
|
Citat:
Det gäller algoritmen. Om man sedan har en privat nyckel (tänk RSA) eller ett hemligt salt så må det vara hemligt, givet att man tror sig kunna hålla den informationen hemlig. Men algoritmen som används bör vara öppen. edit: Och jag skulle kanske ha en åsikt om lösningen. Att hasha lösenordet med SHA och lite salt är ävl at anse som säkert i dagsläget. MD5 är generellt sett det inte eftersom det finns en del som lyckats återskapa MD5-värden genom att bara se på resultatet. |
Citat:
|
Citat:
|
Citat:
|
Citat:
Vi har diskuterat det förut: http://www.webmasternetwork.se/index.php?a...hl=blixten&s=wn |
Ja, jag vet inte hur det är i eran php-värld, men för mig är det iaf en fråga om att skriva siffran "512" istället för "1" efter order SHA när jag ska generera en hash. Jag köper att det är minimal skillnad för ett vangligt svenskt svensson system som aldrig under sin livstid kommer att ha data tillräckligt intressant för NSA eller vilka som nu skulle kunna lägga resurser på att knäcka sin egen algorithm (SHA1) ;) Men då disk är billigt så sparar jag hellre en hash med 64tecken än en med 32. :)
Ska ett system leva i några år så vill man ju inte låta alla användare skapa nya passwords en vacker dag om det behövs bytas. "Attacks always get better; they never get worse" |
När jag läser inläggen i denna tråd så får jag en känsla av att lösenorden ofta skickas i klartext från
webbläsare till webbserver. Redan här bör man väl använda hash och kombinera med nonce vid inloggning? |
Citat:
|
Alla tider är GMT +2. Klockan är nu 03:50. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson