哈希竞猜游戏开发逻辑说明丨hash哈希游戏系统开发技术(源码)

2022-06-09 18:00:53 浏览数 (1)

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

  总体而言,哈希算法可理解为一种消息摘要算法,将消息或数据压缩变小并拥有固定格式。由于其单向运算具有一定的不可逆性,哈希算法已成为加密算法中一个构成部分,但完整的加密机制不能仅依赖哈希算法。

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

  、、sohu.com等

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

  哈希是将任意长的输入编程加密的固定长度输出的过程。V询(Whi366)哈希并不等同于加密方法,因为无法解密哈希值来获取原始数据。事实上哈希是一种单向加密函数。

  With a hash function,data on the Internet can be saved as a fixed length string.One method is SHA-256(secure hash algorithm-256 bits).SHA-256 is the successor of SHA-1,and the output of SHA-1 is 160 bits.

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

代码语言:javascript复制
  //ELF Hash Function
  unsigned int ELFHash(char*str)
  {
  unsigned int hash=0;
  unsigned int x=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&07FFFFFFF);
  }
  //该散列算法是基于贝尔实验室的彼得J温伯格的的研究。
  //在Compilers一书中(原则,技术和工具),建议采用这个算法的散列函数的哈希方法。
  unsigned int PJWHash(const char*str)
  {
  unsigned int BitsInUnignedInt=(unsigned int)(sizeof(unsigned int)*8);
  unsigned int ThreeQuarters=(unsigned int)((BitsInUnignedInt*3)/4);
  unsigned int6(unsigned int)(BitsInUnignedInt/8);
  unsigned int HighBits=(unsigned int)(0xFFFFFFFF)<<(BitsInUnignedInt
  -OneEighth);
  unsigned int hash=0;
  unsigned int test=0;
  while(*str)

0 人点赞