---
title: "Längd av sha512"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/182428-längd-av-sha512"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "dreas"
published: "2010-02-14T13:56:25.000Z"
updated: "2010-02-17T12:27:41.000Z"
replies: 3
views: 839
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/182428-längd-av-sha512"
---

# Längd av sha512

## #1 — dreas, 2010-02-14T13:56Z

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!

Permalänk: https://www.webforum.nu/p/182428

## #2 — SPiN, 2010-02-14T17:05Z

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.

Permalänk: https://www.webforum.nu/p/2225783

## #3 — dreas, 2010-02-17T11:25Z

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!

Permalänk: https://www.webforum.nu/p/2226039

## #4 — colione, 2010-02-17T12:27Z

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](http://en.wikipedia.org/wiki/HMAC) för att lagra lösenord är snudd på bra.
Att använda en standardiserad [Key derivation function](http://en.wikipedia.org/wiki/KDF), typ [PBKDF2](http://en.wikipedia.org/wiki/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/>

Permalänk: https://www.webforum.nu/p/2226044

---

Tråden på webben: https://www.webforum.nu/amne/php/182428-längd-av-sha512
