I have some string and I want to hash it with the SHA-256 hash function using C#. I want something like this:
string hashString = sha256_hash("samplestring"); Is there something built into the framework to do this?
I have some string and I want to hash it with the SHA-256 hash function using C#. I want something like this:
string hashString = sha256_hash("samplestring"); Is there something built into the framework to do this?
The implementation could be like that
public static String sha256_hash(String value) { StringBuilder Sb = new StringBuilder(); using (SHA256 hash = SHA256Managed.Create()) { Encoding enc = Encoding.UTF8; Byte[] result = hash.ComputeHash(enc.GetBytes(value)); foreach (Byte b in result) Sb.Append(b.ToString("x2")); } return Sb.ToString(); } Edit: Linq implementation is more concise, but, probably, less readable:
public static String sha256_hash(String value) { using (SHA256 hash = SHA256Managed.Create()) { return String.Concat(hash .ComputeHash(Encoding.UTF8.GetBytes(value)) .Select(item => item.ToString("x2"))); } } Edit 2: .NET Core , .NET5, .NET6 ...
public static String sha256_hash(string value) { StringBuilder Sb = new StringBuilder(); using (var hash = SHA256.Create()) { Encoding enc = Encoding.UTF8; byte[] result = hash.ComputeHash(enc.GetBytes(value)); foreach (byte b in result) Sb.Append(b.ToString("x2")); } return Sb.ToString(); } using), 2. Deal with bytes: Encoding as well as GetBytes 3. Represent the outcome as a string - StringBuilder and ToString("x2")From .NET 5 onwards, you can use the new Convert.ToHexString method to convert the hash byte array into a (hex) string without having to use a StringBuilder or .ToString("X0"), etc.:
public static string HashWithSHA256(string value) { using var hash = SHA256.Create(); var byteArray = hash.ComputeHash(Encoding.UTF8.GetBytes(value)); return Convert.ToHexString(byteArray); } I tried all of the above methods and none worked for me. This one is one I made that works flawlessly:
public static string Encrypt(string input) { using (SHA256 sha256 = SHA256.Create()) { // Convert the input string to a byte array byte[] inputBytes = Encoding.UTF8.GetBytes(input); // Compute the hash value of the input bytes byte[] hashBytes = sha256.ComputeHash(inputBytes); // Convert the hash bytes to a hexadecimal string StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("x2")); } return sb.ToString(); } } Make sure to be using System.Security.Cryptography at the beginning of your code
using System.Security.Cryptography I was looking for an in-line solution, and was able to compile the below from Dmitry's answer:
public static String sha256_hash(string value) { return (System.Security.Cryptography.SHA256.Create() .ComputeHash(Encoding.UTF8.GetBytes(value)) .Select(item => item.ToString("x2"))); } IEnumerable<string>. And you copy-pasted a terrible naming convention.