dreasMedlem sedan jan. 2004140 inlägg Hej,
Lite frågor och funderingar kring hashning.
Som jag förstått det ska sha512 bestå av 512 bitar (varav namnet), men om jag kör en hash('sha512', $meddelande); så får jag ut en sträng som består av 128 tecken. Ska inte denna sträng vara 512 tecken och därmed 512 bitar? Eller har jag förstått det fel?
Vidare kan jag fråga ifall ni även tycker man bör dela upp meddelande (i detta fall ett lösenord) i två delar när man lägger till salt. Eller räcker det exempelvis med:
systemsalt + lösenord + användarsalt
Delas lösenordet upp i två delar, hade man ju kunna få följande kombination eller liknande:
användarsalt + lösenord_del1 + systemsalt + lösenord_del2 + användarsalt
Är vi inne på overkill, eller kan detta vara en "good practice"
Tack på förhand!
SPiNMedlem sedan mars 20007 896 inlägg Hej ;)
Checksumman från SHA512 är helt riktigt 512 bitar lång. Jag ska försöka förklara:
Först och främst tar hash()-funktionen tre parametrar. Den första bestämmer vilken algoritm som ska användas, den andra parametern innehåller meddelandet och den tredje bestämmer ut-typen från funktionen. Med ut-typ menar jag vilken form ditt "message digest" ska ha, det är antingen hexadecimalt (vilket är default) eller så är det rå utdata (binärdata, vilket då måste specificeras som 'true' i parametern).
Exempel:
$hash = hash('sha512', 'Yeaheahea', false); // eller helt enkelt hash('sha512', '...');
Ovanstående kod ger tillbaka en hexadecimal sträng på 128 tecken, det har du redan märkt.
$hash = hash('sha512', 'Yeaheahea', [b]true[/b]);
Ovanstående ger tillbaka en binär sträng om 64 tecken.
Kom också ihåg att ett tecken (en byte) motsvaras av 8 bitar (ett tecken är en byte oftast), men hexadecimalt representeras av 4 bitar, således:
[hexdata:] 128 * 4 bitar per tecken ger oss 512 bitar totalt.
[binärdata:] 64 tecken x 8 bitar per tecken ger oss 512 bitar totalt. :)
Ang. uppdelning av meddelanden, tycker jag inte alltid att det är nödvändigt. Jag brukar i 95% av fallen nöja mig med systemsalt + användarsalt + lösenord (inte nödvändigtvis i den ordningen). Så behöver du mer säkerhet kan du dela upp meddelandet och även hasha det flera gånger.
dreasMedlem sedan jan. 2004140 inlägg Tja man, hoppas allt är bra med dig!
Och tack för att du bjussa på ett toppensvar! Då är jag med på noterna, tack tack!
colioneMedlem sedan juni 20014 421 inlägg Att lagra lösenord i klartext är jättedumt.
Att hasha lösenordet utan salt är dumt.
Att hasha lösenord med salt är bättre än dumt, men fortfarande inte bra.
Att använda HMAC för att lagra lösenord är snudd på bra.
Att använda en standardiserad Key derivation function, typ PBKDF2 (som nyttjar salt, password, HMAC och iterationer) är bra.
Lite läsning:
http://www.itnewb.com/v/Encrypting-Passwords-with-PHP-for-Storage-Using-the-RSA-PBKDF2-Standard
http://php.net/manual/en/function.hash-hmac.php
http://rdist.root.org/2009/10/29/stop-using-unsafe-keyed-hashes-use-hmac/