• 关于哈希游戏开发详细逻辑分析丨解析区块链哈希游戏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计算后结果相同,则说明该文件内容极大概率就是一样的。

  • 相关阅读:
    Python (十二) 模块、包
    11 JSP
    【Git技巧】第八篇 git历史提交版本回退(可切换任意已经提交的版本)
    3.Android应用资源:处理配置变更
    LLM-TAP随笔——语言模型训练数据【深度学习】【PyTorch】【LLM】
    使用 SwiftUI 构建可搜索列表,为您的 iOS 应用程序创建具有自动完成功能的可搜索列表(教程含源码)
    ZingGrid JS 1.4.0 Crack
    【蓝桥杯选拔赛真题60】Scratch旋转风车 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析
    6年测试,面试大放厥词,最后竟.....
    通过CTY、VTY、TTY访问网络设备[计网实践Cisco Packet Tracer]
  • 原文地址:https://blog.csdn.net/m0_54853503/article/details/126153364