关于哈希游戏开发详细逻辑分析丨解析区块链哈希游戏DAPP系统开发的技术原理是怎样

什么是哈希/Hash

哈希又称作“散列”,是一种数学计算机程序,它接收任何一组任意长度的输入信息,通过哈希算法变换成固定长度的数据指纹输出形式,如字母和数字的组合,该输出就是“哈希值”。

总体而言,哈希算法可理解为一种消息摘要算法,哈希游戏;(刘森-I8o-z857-86z4)将消息或数据压缩变小并拥有固定格式。由于其单向运算具有一定的不可逆性,哈希算法已成为加密算法中一个构成部分,但完整的加密机制不能仅依赖哈希算法。
在这里插入图片描述

在一个cache系统中,需要实现一个域名白名单,域名为下列数据:

该白名单需要在程序启动时加载一次,主要执行查询操作。请设计一个数据结构和相应的初始化查询函数,使得检索尽可能的快。(不能使用stl::map,等等key-value刑类库)。

我们可以看到,该题目提出了字符串的快速查找,并且只加载一次。使用Hash比较好。

我们可能首先就是想到使用C++中的MAP,题目中给出了不允许使用MAP,那么肯定第二选择就是使用Berkeley DB(DB)这种的文件数据库了,但是题目中明显提出不允许使用key-value类型库。

我们思考Berkeley DB(DB)的原理可以晓得,这个就是一个Hash的过程,map其实也是hash的思想。
在这里插入图片描述

自己设计一个hash系统咯。冲突处理…

字符串hash可能就想到使用ELFhash算法,主要分析下ELFHash算法。

ELFhash函数在UNIX系统V版本4中的“可执行链接格式”(Executable and Linking Format,即ELF)中会用到,ELF文件格式用于存储可执行文件与目标文件。ELFhash函数是对字符串的散列。它对于长字符串和短字符串都很有效,字符串中每个字符都有同样的作用,它巧妙地对字符的ASCII编码值进行计算,ELFhash函数对于能够比较均匀地把字符串分布在散列表中。

这些函数使用位运算使得每一个字符都对最后的函数值产生影响。

//ELF Hash Function

unsignedintELFHash(char*str)

{

unsignedinthash=0;

unsignedintx=0;

while(*str)

{

hash=(hash<<4)+(*str++);//hash左移4位,当前字符ASCII存入hash低四位。

if((x=hash&0xF0000000L)!=0)

{//如果最高的四位不为0,则说明字符多余7个,如果不处理,再加第九个字符时,第一个字符会被移出,因此要有如下处理。

//该处理,如果对于字符串(a-z或者A-Z)就会仅仅影响5-8位,否则会影响5-31位,因为C语言使用的算数移位

hash^=(x>>24);

//清空28-31位。

hash&=~x;

}

}

//返回一个符号位为0的数,即丢弃最高位,以免函数外产生影响。(我们可以考虑,如果只有字符,符号位不可能为负)

return(hash&0×7FFFFFFF);

}

常见哈希算法

目前常见的Hash算法包括国际上的Message Digest(MD)系列和Secure Hash Algorithm(SHA)系列算法,以及国内的SM3算法。

其中,SHA 256是SHA系列算法之一,由美国国安局设计、美国国家标准与技术研究院发布的一套哈希算法,由于其摘要长度为256bits,故称SHA 256。SHA 256也是保护数字信息的最安全的方法之一。

例如计算

“hello blockchain world,this is yeasy github”的SHA-256 Hash值,

得到的结果将是

“db8305d71a9f2f90a3e118a9b49a4c381d2b80cf7bcef81930f30ab1832a3c90”。

对于某个文件,无需查看原始内容,只要其SHA-256 Hash计算后结果相同,则说明该文件内容极大概率就是一样的。

猜你喜欢

转载自blog.csdn.net/m0_54853503/article/details/126153364