前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >哈希竞猜游戏开发逻辑说明丨hash哈希游戏系统开发技术(源码)

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

原创
作者头像
开发weixin-XTKF556
修改2022-06-09 18:00:53
3450
修改2022-06-09 18:00:53
举报
文章被收录于专栏:程序员11程序员11

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

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

  在一个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)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档