首页 > 区块链 > 区块链 > 哈希竞猜游戏系统开发技术逻辑(Demo方案)
哈希算法(Hash Algorithm)即散列算法的直接音译。
我们可以通过特定的计算方法,利用任意长度的输入(例如文本等信息)生成一个固定长度的字符串。这个字符串就是该输入的哈希值。
哈希表(HashTable,也叫散列表),是根据键名(Key)直接访问对应内存存储位置的数据结构。
其实现原理是通过哈希函数(也叫散列函数)将元素的键名映射为数组下标(转化后的值叫做哈希值或散列值),然后在对应下标位置存储记录值。当我们按照键名查询元素时,可以使用同样的哈希函数,将键名转化为数组下标,从对应的数组下标位置读取数据
显然,哈希表使用了数组支持按照下标随机访问数据的特性,所以哈希表其实就是数组的一种扩展,由数组演化而来。可以说,没有数组,就没有哈希表。我们知道,数组访问元素的时间复杂度是O(1),所以哈希表也是一样(不考虑哈希函数的复杂度的话),因此非常高效。
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
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016646/viewspace-2937892/ ,如需转载,请注明出处,否则将追究法律责任。