SharpHash is a C# hashing library which provides an easy to use interface for computing hashes and checksums of data. It also supports state based (incremental) hashing. This is a upgraded fork (net7.0), that has netstandard 2.0 as TargetFramework for better compatibility
$ dotnet add package CraftingDragon007.SharpHashThis is a upgraded fork (net7.0), that has netstandard 2.0 as TargetFramework for better compatibility
The original project was made by ron4fun: https://github.com/ron4fun/SharpHash
SharpHash is a C# hashing library that provides a fluent interface for computing hashes and checksums of strings, files, streams, bytearrays and untyped data to mention but a few.
It also supports Incremental Hashing, Cloning, NullDigest and HashName Builder.
All CRC Variants from CRC3 to CRC64 :heavy_check_mark:Adler32 :heavy_check_mark:AP BKDR Bernstein Bernstein1 DEK DJB ELF FNV :heavy_check_mark:
FNV1a JS Jenkins3 Murmur2 MurmurHash3_x86_32 OneAtTime :heavy_check_mark:
PJW RS Rotating SDBM ShiftAndXor SuperFast XXHash32 :heavy_check_mark:
FNV64 FNV1a64 Murmur2_64 SipHash64_2_4 XXHash64 :heavy_check_mark:MurmurHash3_x86_128 MurmurHash3_x64_128 SipHash128_2_4 :heavy_check_mark:MD2 :heavy_check_mark:
MD4 :heavy_check_mark:
MD5 :heavy_check_mark:
SHA-0 :heavy_check_mark:
SHA-1 :heavy_check_mark:
SHA-2 (224, 256, 384, 512, 512-224, 512-256) :heavy_check_mark:
GOST 34.11-94 :heavy_check_mark:
GOST R 34.11-2012 (AKA Streebog) (256, 512) :heavy_check_mark:
Grindahl (256, 512) :heavy_check_mark:
HAS160 :heavy_check_mark:
RIPEMD (128, 256, 256, 320) :heavy_check_mark:
Tiger (128, 160, 192 (Rounds 3, 4, 5)) :heavy_check_mark:
Tiger2 (128, 160, 192 (Rounds 3, 4, 5)) :heavy_check_mark:
Snefru (128, 256) :heavy_check_mark:
Haval (128, 160, 192, 224, 256 (Rounds 3, 4, 5)) :heavy_check_mark:
Panama :heavy_check_mark:
RadioGatun (RadioGatun32, RadioGatun64) :heavy_check_mark:
WhirlPool :heavy_check_mark:
Blake2B (160, 256, 384, 512) :heavy_check_mark:
Blake2S (128, 160, 224, 256) :heavy_check_mark:
SHA-3 (224, 256, 384, 512) :heavy_check_mark:
Keccak (224, 256, 288, 384, 512) :heavy_check_mark:
Blake2BP :heavy_check_mark:
Blake2SP :heavy_check_mark:
Blake3 :heavy_check_mark:
PBKDF2 :heavy_check_mark:
Argon2 (2i, 2d and 2id variants) :heavy_check_mark:
Scrypt :heavy_check_mark:
HMAC (all supported hashes) :heavy_check_mark:
KMAC (KMAC128, KMAC256) :heavy_check_mark:
Blake2MAC (Blake2BMAC, Blake2SMAC) :heavy_check_mark:
Shake (Shake-128, Shake-256) :heavy_check_mark:
CShake (CShake-128, CShake-256) :heavy_check_mark:
Blake2X (Blake2XS, Blake2XB) :heavy_check_mark:
KMACXOF (KMAC128XOF, KMAC256XOF) :heavy_check_mark:
Blake3XOF :heavy_check_mark:
using SharpHash.Base;
using SharpHash.Interfaces;
using System;
using System.Text;
namespace Program
{
public class Hello
{
public static void Main()
{
// Chaining mode
string result = HashFactory.Crypto.CreateMD5()
.ComputeString("Hello C#", Encoding.UTF8).ToString();
// Incremental mode
IHash hash = HashFactory.Crypto.CreateMD5();
hash.Initialize();
hash.TransformString("Hello", Encoding.UTF8);
hash.TransformString(" C#", Encoding.UTF8);
string result_2 = hash.TransformFinal().ToString();
bool check = result == result_2;
// Using the HashName Builder variation
IHash hash_builder = HashFactory.CreateHash("md5");
string result_3 = hash_builder.ComputeString("Hello C#",
Encoding.UTF8).ToString();
bool check_2 = result == result_3;
}
}
}
If you want implementations in other languages, you can check out these
1Mcci95WffSJnV6PsYG7KD1af1gDfUvLe6