---
title: "Hashing"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/103972-hashing"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Dino"
published: "2004-05-20T14:35:34.000Z"
updated: "2004-05-26T17:45:30.000Z"
replies: 8
views: 377
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/dotnet/103972-hashing"
---

# Hashing

## #1 — Dino, 2004-05-20T14:35Z

Funderar på om ComputeHash invändigt använder sig av den kod som Kod 1 innehåller, CryptoStream alltså, så att det är lika bra att använda kod 2. Någon som vet? Eller har rekommendationer rent allmänt.

```
//Kod 1
public string Hash(byte[] input)
{
   HashAlgorithm ha = SHA384.Create();
   using(CryptoStream cs = new CryptoStream(Stream.Null, ha, CryptoStreamMode.Write)) 
   {
      cs.Write(input, 0, input.Length);
      cs.FlushFinalBlock();
   }
   return  Convert.ToBase64String(ha.Hash));
}

//Kod 2
public string Hash(byte[] input)
{
   HashAlgorithm ha = SHA384.Create();
   return  Convert.ToBase64String(ha.ComputeHash(input)));
}
```

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

## #2 — fredrik, 2004-05-21T09:29Z

En liten kommentar bara....

...har du jämfört din hash med en "riktig" hash utförd av en algoritm som du **vet** fungerar?

Krypto-klasserna i .NET kan användas på massor av sätt och returnerar då olika värden, så det kan vara bra att jämföra med ett hash-värde man vet stämmer. Jag brukar kolla mot:
<http://www.securitystats.com/tools/hashcalc.php>

Tänk på att hash-värden först ska plockas ut som HEX-värden innan du gör BASE64 av dem.

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

## #3 — Dino, 2004-05-21T10:49Z

Ok, det var ju trevligt. Testade SeurityStats med "abcdef" med följande kod.

```
public string Hash(string input)
{
   byte[] b = Encoding.UTF8.GetBytes(input);
   HashAlgorithm ha = MD5.Create();
   return Convert.ToBase64String(ha.ComputeHash(b));
}
```

SeurityStats ger: E80B5017098950FC58AAD83C8C14978E
Min ger: 6AtQFwmJUPxYqtg8jBSXjg== 

Är ju lite svårt att veta vad det är som gör skillnaden.

> Tänk på att hash-värden först ska plockas ut som HEX-värden innan du gör BASE64 av dem.

Hur skulle det se ut?

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

## #4 — fredrik, 2004-05-26T06:03Z

Du hämtar ut ditt värde som BASE64. Enligt alogritmen ska värdet hämtas som HEX och inte BASE64.

Du får loopa igenom dina bytes och göra typ:
for each b in hashBytes
    hash &= string.format("{0:X2}", b)
next

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

## #5 — Dino, 2004-05-26T07:51Z

> **fredrik skrev:**
>
> ...Enligt alogritmen ska värdet hämtas som HEX och inte BASE64....

Har en method som hashar beroende på vilken hashalogritm man väljer så gäller samma sak för SHA varianterna.

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

## #6 — fredrik, 2004-05-26T08:21Z

Ja, fast jag tror att även MD5, SHA1 mfl. faktiskt ska returnera ett HEX-värde. Sen kan du BASE64.a detta värde.

(Annars får du bygga in logik för att BASE64.a vissa och HEX.a vissa)

En sak är dock säker: Lite **inte** på de kod-exempel i .NET som du hittar på nätet! 9/10 returnerar helt enkelt fel då de returner BASE64 från SHA1.

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

## #7 — Dino, 2004-05-26T08:30Z

Ok. nu vet jag inte om jag är allmänt dum. Men om jag har en sån här:

```
private static string BytesToHexString(byte[] input)
{
   StringBuilder sb = new StringBuilder(64);
   for(int i = 0; i < input.Length; i++)
   {
      sb.Append(String.Format("{0:x2}", input[i]));
   }
   return sb.ToString();
}
```

Skall jag då göra om denna string till bytes igen eftersom Convert.ToBase64String endast tar emot bytes.

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

## #8 — fredrik, 2004-05-26T11:49Z

Japp, och det gör du enkelt med typ:

```
return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(sb.ToString())
```

Kom dock ihåg att om du ska jämföra med <http://www.securitystats.com/tools/hashcalc.php> så ska du jämföra värdet som HEX och inte BASE64.

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

## #9 — Dino, 2004-05-26T17:45Z

Ok, tack för tipsen.

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/103972-hashing
