哈希算法是什么,哈希游戏系统开发方案

电子说

1.3w人已加入

描述

什么是哈希/Hash

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

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

  、、sohu.com等

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

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

  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.

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

  //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)

  {

  hash=(hash<)+(*str++);<>

  if((test=hash&HighBits)!=0)

  {

  hash=((hash^(test>>ThreeQuarters))&(~HighBits));

  }

  }

  return(hash&0x7FFFFFFF);

  }

审核编辑:符乾江

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分