`
zhaohaolin
  • 浏览: 1003970 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。  哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。  哈希  通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为“消息摘要”。[/size]
计算方法


哈希算法

用来产生一些数据片段(例如消息或会话项)的哈希值的算法。使用好的哈希算法,在输入数据中所做的更改就可以更改结果哈希值中的所有位;因此,哈希对于检测数据对象(例如消息)中的修改很有用。此外,好的哈希算法使得构造两个相互独立且具有相同哈希的输入不能通过计算方法实现。典型的哈希算法包括 MD2、MD4、MD5 和 SHA-1。哈希算法也称为“哈希函数”。  另请参阅: 基于哈希的消息验证模式 (HMAC), MD2, MD4, MD5, 消息摘要, 安全哈希算法 (SHA-1)  MD5一种符合工业标准的单向 128 位哈希方案,由 RSA Data Security, Inc. 开发。 各种“点对点协议 (PPP)”供应商都将它用于加密的身份验证。哈希方案是一种以结果唯一并且不能返回到其原始格式的方式来转换数据(如密码)的方法。质询握手身份验证协议 (CHAP) 使用质询响应并在响应时使用单向 MD5 哈希法。按照此方式,您无须通过网络发送密码就可以向服务器证明您知道密码。  质询握手身份验证协议 (CHAP)“点对点协议 (PPP)”连接的一种质询响应验证协议,在 RFC 1994 中有所描述。 该协议使用业界标准 MD5 哈希算法来哈希质询串(由身份验证服务器所发布)和响应中的用户密码的组合。

点对点协议 (PPP)

用点对点链接来传送多协议数据报的行业标准协议套件。RFC 1661 中有关于 PPP 的文档。  另请参阅: 压缩控制协议 (CCP), 远程访问, 征求意见文档 (RFC), 传输控制协议/Internet 协议 (TCP/IP), 自主隧道

几个比较著名的哈希算法

class GeneralHashFunctionLibrary
  {
  public long RSHash(String str)
  {
  int b = 378551;
  int a = 63689;
  long hash = 0;
  for(int i = 0; i < str.length(); i++)
  {
  hash = hash * a + str.charAt(i);
  a = a * b;
  }
  return hash;
  }
  public long JSHash(String str)
  {
  long hash = 1315423911;
  for(int i = 0; i < str.length(); i++)
  {
  hash ^= ((hash << 5) + str.charAt(i) + (hash >> 2));
  }
  return hash;
  }
  public long PJWHash(String str)
  {
  long BitsInUnsignedInt = (long)(4 * 8);
  long ThreeQuarters = (long)((BitsInUnsignedInt * 3) / 4);
  long OneEighth = (long)(BitsInUnsignedInt / 8);
  long HighBits = (long)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth);
  long hash = 0;
  long test = 0;
  for(int i = 0; i < str.length(); i++)
  {
  hash = (hash << OneEighth) + str.charAt(i);
  if((test = hash & HighBits) != 0)
  {
  hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));
  }
  }
  return hash;
  }
  public long ELFHash(String str)
  {
  long hash = 0;
  long x = 0;
  for(int i = 0; i < str.length(); i++)
  {
  hash = (hash << 4) + str.charAt(i);
  if((x = hash & 0xF0000000L) != 0)
  {
  hash ^= (x >> 24);
  }
  hash &= ~x;
  }
  return hash;
  }
  public long BKDRHash(String str)
  {
  long seed = 131; // 31 131 1313 13131 131313 etc..
  long hash = 0;
  for(int i = 0; i < str.length(); i++)
  {
  hash = (hash * seed) + str.charAt(i);
  }
  return hash;
  }
  public long SDBMHash(String str)
  {
  long hash = 0;
  for(int i = 0; i < str.length(); i++)
  {
  hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash;
  }
  return hash;
  }
  public long DJBHash(String str)
  {
  long hash = 5381;
  for(int i = 0; i < str.length(); i++)
  {
  hash = ((hash << 5) + hash) + str.charAt(i);
  }
  return hash;
  }
  public long DEKHash(String str)
  {
  long hash = str.length();
  for(int i = 0; i < str.length(); i++)
  {
  hash = ((hash << 5) ^ (hash >> 27)) ^ str.charAt(i);
  }
  return hash;
  }
  public long BPHash(String str)
  {
  long hash = 0;
  for(int i = 0; i < str.length(); i++)
  {
  hash = hash << 7 ^ str.charAt(i);
  }
  return hash;
  }
  public long FNVHash(String str)
  {
  long fnv_prime = 0x811C9DC5;
  long hash = 0;
  for(int i = 0; i < str.length(); i++)
  {
  hash *= fnv_prime;
  hash ^= str.charAt(i);
  }
  return hash;
  }
  public long APHash(String str)
  {
  long hash = 0xAAAAAAAA;
  for(int i = 0; i < str.length(); i++)
  {
  if ((i & 1) == 0)
  {
  hash ^= ((hash << 7) ^ str.charAt(i) ^ (hash >> 3));
  }
  else
  {
  hash ^= (~((hash << 11) ^ str.charAt(i) ^ (hash >> 5)));
  }
  }
  return hash;
  }
  }
 

 

分享到:
评论

相关推荐

    Matlab实现感知哈希算法

    **感知哈希算法详解与Matlab实现** 感知哈希(Perceptual Hashing,简称pHash)是一种图像识别技术,用于判断两张图片是否相似。它通过模拟人类视觉系统的感知特性,将图片转换成一个简短的哈希值,进而进行比较。...

    基于python与哈希算法实现图像去重

    本文将深入探讨如何利用Python编程语言和哈希算法来有效地实现图像去重。 首先,我们要理解哈希算法的基本原理。哈希(Hash)算法是一种将任意长度的输入(也叫做预映射)通过一个算法,变换成固定长度的输出,这个...

    针对8位单片机的哈希算法实现

    哈希算法,也称为散列函数,是一种将任意长度的数据转化为固定长度输出的函数。在信息安全、数据验证和数字签名等领域扮演着重要角色。本文主要关注的是如何在8位单片机上实现SHA1哈希算法,这是一种广泛使用的哈希...

    暴雪哈希算法全部源码

    ### 暴雪哈希算法源码解析与应用 #### 一、暴雪哈希算法简介 暴雪娱乐(Blizzard Entertainment)是一家知名的电子游戏开发公司,其在游戏开发领域有着丰富的经验和深厚的技术积累。其中,一个被广泛讨论且具有较...

    一致性哈希算法(ketama hashing)

    一致性哈希算法(Consistent Hashing)是一种在分布式系统中实现负载均衡的算法,尤其在分布式缓存如Memcached和Redis等场景下广泛使用。它解决了传统哈希算法在节点增减时导致的大量数据迁移问题,提高了系统的可用...

    常用哈希算法代码实现

    哈希算法,又称散列函数或哈希函数,是信息技术领域中的一种重要工具,尤其在数据完整性检查、信息安全、数据库索引以及密码学等多个方面有着广泛的应用。在本压缩包中,你可能会找到多种常见的哈希算法的代码实现,...

    SHA256、MD5哈希算法实现

    哈希算法,也被称为散列函数,是一种在信息安全领域中广泛应用的技术。它们的主要作用是将任意长度的输入(也称为预映射或消息)转换为固定长度的输出,这个输出通常是一个二进制数字串,被称为哈希值。在本文中,...

    哈希算法详细介绍pdf

    尽管哈希算法有很多种,如MD5、SHA-1等,但SHA-1由于其良好的安全性和可靠性,成为了非常重要的哈希算法之一。 数字签名是电子商务活动中不可或缺的技术,它允许用户通过使用密码学原理来验证信息的来源和完整性。...

    OpenCvSharp 图像拼接 OpenCV感知哈希算法进行图片相似度对比

    在本文中,我们将深入探讨如何使用OpenCvSharp库,结合感知哈希算法与图像拼接技术,来实现图片的相似度对比与全景图像生成。首先,我们需要了解OpenCV和OpenCvSharp这两个核心工具。 **OpenCV** 是一个开源的...

    相似图搜索原理-感知哈希算法

    其核心是通过哈希算法来创建图像的数字指纹,以便快速比较和识别图像的相似性。 感知哈希算法(Perceptual Hash algorithm)是实现相似图搜索的一种有效方法。它的设计灵感来源于人类视觉系统对图像的感知,即在...

    C语言下很实用的哈希算法

    哈希算法,也称为散列算法,是一种在计算机科学中广泛使用的数据结构和算法,用于高效地存储和检索数据。在C语言环境下,哈希算法的实现通常涉及到自定义的数据结构和函数,以便将任意长度的输入(键或字符串)转化...

    论文研究-分布式存储系统的哈希算法研究.pdf

    针对分布式存储系统中如何实现数据在物理存储上的均匀分布和高效定位的问题,对多种哈希算法展开研究,提出了衡量分布式存储系统哈希算法优劣的标准;从散列分布性、哈希冲突和计算效率等多个维度对这些哈希算法进行...

    分布式存储系统的哈希算法研究.pdf

    在分布式存储系统中,哈希算法扮演着至关重要的角色,它能够将数据均匀地分布在不同的存储节点上,同时还能够高效地定位数据,从而提高系统的性能。 哈希算法的基本原理是将输入数据(通常是字符串或其他数据类型)...

    图片识别-感知哈希算法

    感知哈希算法是一种在图像处理领域中用于比较和识别图像的技术。它的主要目的是将图像转换成一种紧凑且可比较的数字“指纹”,这样就可以高效地判断两张图片是否相似或相同。这种技术在诸如搜索引擎的图片搜索功能、...

    哈希算法的实现

    哈希算法,也被称为散列函数,是一种在计算机科学中广泛使用的数据结构和算法。它通过将任意长度的输入(也称为预映射)转换为固定长度的输出,这个输出通常是一个数字序列,称为哈希值。哈希算法在很多领域都有应用...

    几个比较著名的哈希算法

    哈希算法,也被称为散列函数,是一种在计算领域中广泛应用的数据处理技术。它通过将任意长度的输入(也称为预映射或消息)转换为固定长度的输出,这个输出通常是一个二进制数字,也被称为哈希值或散列码。哈希算法的...

    基于一致性哈希算法的分布式数据库高效扩展方法.pdf

    一致性哈希算法最初由麻省理工学院的K等人提出,并被广泛应用于分布式系统中,以解决节点动态变化时数据一致性问题。其核心思想是通过引入哈希环,将数据对象均匀分布在哈希环上的不同节点中,以此降低节点变更对...

    ssl证书生成工具解决弱哈希算法签名的SSL证书(CVE-2004-2761)

    弱哈希算法签名的SSL证书(CVE-2004-2761)。 远程服务使用SSL证书链,该证书链已使用加密弱哈希算法(例如MD2、MD4、MD5或SHA1)签名。这些签名算法很容易受到碰撞攻击。攻击者可以利用这一点生成另一个具有相同数字...

    基于C++通过三种哈希算法,透过汉明距离的比较,搜索指定文件夹内相似图片

    本文将深入探讨一个基于C++的项目——"PixSearch(相似图片搜索)",该项目利用三种哈希算法:均值哈希(aHash)、差异哈希(dHash)和感知哈希(pHash),并通过汉明距离计算来识别并搜索指定文件夹内的相似图片。...

    哈希算法Hash

    哈希算法 Hash 哈希算法 Hash 是一种常用的数据加密技术,用于将任意长度的数据转换为固定长度的哈希值。哈希算法 Hash 的设计目的是为了实现数据的加密和身份验证。下面我们将对哈希算法 Hash 进行详细的介绍和...

Global site tag (gtag.js) - Google Analytics