Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
.NET/C# Generate SHA1 hex string for a string encoded as UTF8
using System.Security.Cryptography;
using System.Text;
namespace Snippets
{
public static class SHA1Util
{
/// <summary>
/// Compute hash for string encoded as UTF8
/// </summary>
/// <param name="s">String to be hashed</param>
/// <returns>40-character hex string</returns>
public static string SHA1HashStringForUTF8String(string s)
{
byte[] bytes = Encoding.UTF8.GetBytes(s);
var sha1 = SHA1.Create();
byte[] hashBytes = sha1.ComputeHash(bytes);
return HexStringFromBytes(hashBytes);
}
/// <summary>
/// Convert an array of bytes to a string of hex digits
/// </summary>
/// <param name="bytes">array of bytes</param>
/// <returns>String of hex digits</returns>
public static string HexStringFromBytes(byte[] bytes)
{
var sb = new StringBuilder();
foreach (byte b in bytes)
{
var hex = b.ToString("x2");
sb.Append(hex);
}
return sb.ToString();
}
}
}
@knocte
Copy link

knocte commented Jan 7, 2014

There's a typo: pubilc->public, but apart from that, thanks for this useful snippet!

Loading

@kristopherjohnson
Copy link
Author

kristopherjohnson commented Jul 9, 2015

Fixed the typo. Thanks!

Loading

@stevehansen
Copy link

stevehansen commented Oct 24, 2015

SHA1 implements IDisposable so you should use an using

            using (var sha1 = SHA1.Create())
            {
                byte[] hashBytes = sha1.ComputeHash(bytes);

                return HexStringFromBytes(hashBytes);
            }

Loading

@ivandrofly
Copy link

ivandrofly commented Oct 31, 2016

If it's going to be called multiple times, it would be more efficient if you pull out the string builder to a static readonly field

Loading

@logo123
Copy link

logo123 commented Sep 23, 2017

i want that encrypted string in 16 character

Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment