首先,什么是哈希算法
哈希算法,也称为散列算法和杂凑算法,是一种从任意文件创建小数字指纹的方法。哈希算法和指纹一样,是用简短的信息保证文件唯一性的标志。这个符号关系到文件的每一个字节,很难找到逆规律。因此,当原始文件发生变化时,其标志值也会发生变化,从而告诉文件用户当前文件不再是您需要的文件。
哈希算法可以将任意长度的二进制明文映射到更短的二进制字符串,不同的明文很难映射到同一个哈希值。
也可以理解为空间映射函数,从很大的值空间映射到很小的值空间。由于不是一一映射,哈希函数在转换后是不可逆的,也就是说不可能通过逆向运算和哈希值来恢复原来的值。
什么是区块哈希值【Block hash】?
区块哈希值是一段数据的DNA,每个区块哈希值都是唯一的、随机的且不可破解的。
什么是区块链?
区块链从本质上讲,它是一个共享数据库,存储于其中的数据或信息。具有不可伪造、全程留痕、可以追溯、公开透明、集体维护等特征。
HashHelper.GetHashedBytes(HashType.MD5,"test");
HashHelper.GetHashedBytes(HashType.MD5,"test".GetBytes());
HashHelper.GetHashedBytes(HashType.MD5,"test","testKey");
HashHelper.GetHashedBytes(HashType.MD5,"test".GetBytes(),"testKey".GetBytes());
HashHelper.GetHashedString(HashType.MD5,"test");
HashHelper.GetHashedString(HashType.SHA1,"test".GetBytes());
HashHelper.GetHashedString(HashType.SHA256,"test","testKey");
HashHelper.GetHashedString(HashType.MD5,"test".GetBytes(),"testKey".GetBytes());
New API Sample
有了新的API以后可以怎么简化呢,来看下面的示例:
var bytes="test".GetBytes();
var keyBytes="test-key".GetBytes();
//HMACMD5
var hmd5V1=HMACMD5.HashData(keyBytes,bytes);
var hmd5V2=HashHelper.GetHashedBytes(HashType.MD5,bytes,keyBytes);
Console.WriteLine(hmd5V2.SequenceEqual(hmd5V1));
//HMACSHA1
var hsha1V1=HMACSHA1.HashData(keyBytes,bytes);
var hsha1V2=HashHelper.GetHashedBytes(HashType.SHA1,bytes,keyBytes);
Console.WriteLine(hsha1V2.SequenceEqual(hsha1V1));
//HMACSHA256
var hsha256V1=HMACSHA256.HashData(keyBytes,bytes);
var hsha256V2=HashHelper.GetHashedBytes(HashType.SHA256,bytes,keyBytes);
Console.WriteLine(hsha256V2.SequenceEqual(hsha256V1));
//HMACSHA384
var hsha384V1=HMACSHA384.HashData(keyBytes,bytes);
var hsha384V2=HashHelper.GetHashedBytes(HashType.SHA384,bytes,keyBytes);
Console.WriteLine(hsha384V2.SequenceEqual(hsha384V1));
//HMACSHA512
var hsha512V1=HMACSHA512.HashData(keyBytes,bytes);
var hsha512V2=HashHelper.GetHashedBytes(HashType.SHA512,bytes,keyBytes);
Console.WriteLine(hsha512V2.SequenceEqual(hsha512V1));