12,898,335 members (54,396 online)
Technical Blog
alternative version

#### Stats

10.5K views
11 bookmarked
Posted 28 Oct 2012

# Cryptography : A Basic Introduction of Hashing and HashAlgo class for beginners – Part 2

, 28 Oct 2012 CPOL
 Rate this:
This blog enable a beginner to understand the concept of Hashing and its Algo classes.

In the previous part of this blog, we learned about the basic concept of Hashing with its practical example, we’ve also read about a confusing question for beginners which is whether both hashing and Encryption are the same? Then, we cover algo classes of Hashing.

### Hash Algorithm Classes

Let's have a look at the given table for various Hash Algorithm Classes.

#### Classes With Description

##### MD5
• Abstract Class extended by a single Concrete class
• Used to implement Message Digest hashing algorithm Version 5
• Support 128-bit hash values
• Widely deployed and commonly used to verify file Integrity
• Created by Ron Rivest in 1991 to replace MD4
##### SHA1
• Abstract Class extended by a single Concrete class
• Used to implement SHA1 hashing algorithm
• Created to replace MD5 due to flaws
• Created in 1995 by NSA as U.S Government Standard
##### KeyedHashAlgorithm
• Abstract Class extended by a several Concrete class
• Used to implement the Keyed-Hash Message Authentication Code
• Created by Mihir Bellare, Ran Canetti and Hugo Krawczyk in 1996
• Uses an existing hashing algorithm such as SA1 and then iterates twice to doubly hash the output value.
##### RIPEMD160
• Abstract Class extended by a single Concrete class
• Used to implement RACE Integrity Primitive Evaluation Message Digest hashing algorithm
• Created in Europe by Hans Dobbertin, Antoon Bosselaers and Bart Preneel in 1996
• Imroved Version of MD5
• Similar in performance to SHA1
##### SHA256
• Abstract Class extended by a single Concrete class
• Used to implement SHA-256 hashing algorithm
• Part of SHA hashing algorithm version 2 variants
• Implement a 256-bit hashing key
##### SHA384
• Abstract Class extended by a single Concrete class
• Used to implement the SHA-384 hashing algorithm
• Part if SHA hashing algorithm version 2 variants
• Implements a 384-bit hashing key
##### SHA512
• Abstract Class extended by a single Concrete class
• Used to implement the SHA-512 hashing algorithm
• Part of SHA hashing algorithm version 2 variants
• Implements a 512-bit hashing key

Table Content-Reference: MS Workshop Advanced Foundation of Microsoft .Net Development.(Book)

As we already discussed about Hashing by using MD5 class in a previous article, here we will go through SHA1 class.

### Hashing By Using SHA1 Class

Just due to the flaws found in the MD5 hashing algorithm, the SHA1 is considered a better hashing algorithm choice, and the successor of MD5, SHA1 proved that it offers better performance and a more secure hashing algorithm than MD5.

### What is SHA1 Class

The SHA1 is one of the commonly used hashing algorithms which provide Hashing functionality by using SHA1 classes and extending `HashAlgorithm` classes. The .NET Framework SHA1 hashing algorithm class uses a 160-bit hash key is extended by the `SHA1CryptoServiceProvider(CSP)` class and the `SHA1Managed` class.

Note: The `SHA1Managed` class is a CLR (Common Language RunTime) managed based class which extends the `SHA1` class. it provides the same functionality as the `SHACryptoServiceProvider` class but being a CLR(Common Language RunTime) managed class.
Benefit: It performs better, protects data stored in memory and it's nicely cleaned up by the garbage collector.

#### Implementation of SHA1 Class

Here, the given code shows you how to use `SHA1CryptoserviceProvider` for hashing your data. `GetSHA1CSPHash` is a function which needs values as parameter. In function `SHA1provider` is an instance of `SHA1CryptoserviceProvider` Class. After creating instance, convert the input string to a byte array and compute the hash, at last managing Loop through each byte of the hashed data and format each one as a hexadecimal string.

Note: To access SHA1CryptoserviceProvider class, you must need to mention System.Security.Cryptography Namespace.

`using System.Security.Cryptography;`

### Now Create a Function

```public static string GetSHA1CSPHash(string plaintext)
{
SHA1CryptoServiceProvider SHA1provider = new SHA1CryptoServiceProvider();
byte[] hasedvalue = SHA1provider.ComputeHash(Encoding.Default.GetBytes(plaintext));
StringBuilder str = new StringBuilder();
for (int counter = 0; counter < hasedvalue.Length; counter++)
{
str.Append(hasedvalue[counter].ToString("X1")); //X1 is just used as format specifier,
//you can use as your requirement.
}
return str.ToString();
}```

In the same way, you can create function for Hashing by `SHA1Managed` Class. You just need to use `SHA1Managed` class instead of `SHA1CryptoServiceProvider` class. You can create instance like:

`SHA1Managed SHA1provider = new SHA1Managed();`

### How to Use Function

you can simply use function by just passing value which need to be hashed as given sample of code.

What Output comes:

### How to Verify Hash

```static bool VerifySHA1CSPhash(string PlainText, string prevhashedvalue)
{
string hashedvalue2 = GetSHA1CSPHash(PlainText);

// Create a StringComparer an compare the hashes.
StringComparer strcomparer = StringComparer.OrdinalIgnoreCase;

if (strcomparer.Compare(hashedvalue2, prevhashedvalue).Equals(0))
{
return true;
}
else
{
return false;
}
}
```

Note: In the same manner, we can create function to verify Hash while using `SHA1Managed` class. We just need the corresponding function responsible to hash data.

We can use the given codes to learn how to use both function to check whether the hashed function is the same or not.

```static void Main(string[] args)
{
Console.WriteLine("Enter Value for Hashed");

string strhashed = GetSHA1CSPHash(yourvalue);
Console.WriteLine("Hashed Value : " + strhashed);

Console.WriteLine("\nDo you want to verify your hash ? if yes press Y");
if (ch == 'Y' || ch == 'y')
{
Console.WriteLine("Enter value again ");

bool res = VerifySHA1CSPhash(yourvalue2, strhashed);
Console.WriteLine("--------------------");
if (res)
{
Console.WriteLine("Hash is Matched");
}
else
{
Console.WriteLine("Hash is not Matching ");
}
Console.WriteLine("--------------------");
}
else { Environment.Exit(1); }

}
```

What output comes:

### Coming Next

In the next article, I will hopefully come back with more basic details and implementation of HMAC and other Hash Algo classes for beginners. Till then, happy coding!

Filed under: .NET, C#, CodeProject, Cryptography
Tagged: .NET, C#, CodeProject, Cryptography

## Share

 Software Developer India
Microsoft Student Partner | MCTS | CP MVP | Crazy Learner

An Indian, who loves his country, believes in freedom, He is an enthusiast Techie and crazy learner. He is passionate about Technologies. He holds Master in Computer Application and Bachelor degree of CS in Information Technology.

He always excited and keen Interested in learning and sharing knowledge. He loves to learn new things, listen music, taking arts and Playing Games..

## You may also be interested in...

 View All Threads First Prev Next
 Coding standard giri00129-Oct-12 8:42 giri001 29-Oct-12 8:42
 Last Visit: 31-Dec-99 18:00     Last Update: 30-Apr-17 12:55 Refresh 1