`
mabusyao
  • 浏览: 253336 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

常见hash算法

阅读更多
感谢因特网提供的便利,暂时先放着,以后慢慢理解
转载 http://www.partow.net/programming/hashfunctions/

/*
 **************************************************************************
 *                                                                        *
 *          General Purpose Hash Function Algorithms Library              *
 *                                                                        *
 * Author: Arash Partow - 2002                                            *
 * URL: http://www.partow.net                                             *
 * URL: http://www.partow.net/programming/hashfunctions/index.html        *
 *                                                                        *
 * Copyright notice:                                                      *
 * Free use of the General Purpose Hash Function Algorithms Library is    *
 * permitted under the guidelines and in accordance with the most current *
 * version of the Common Public License.                                  *
 * http://www.opensource.org/licenses/cpl1.0.php                          *
 *                                                                        *
 **************************************************************************
*/


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;
   }
   /* End Of RS Hash Function */


   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;
   }
   /* End Of JS Hash Function */


   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;
   }
   /* End Of  P. J. Weinberger Hash Function */


   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;
   }
   /* End Of ELF Hash Function */


   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;
   }
   /* End Of BKDR Hash Function */


   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;
   }
   /* End Of SDBM Hash Function */


   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;
   }
   /* End Of DJB Hash Function */


   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;
   }
   /* End Of DEK Hash Function */


   public long BPHash(String str)
   {
      long hash = 0;

      for(int i = 0; i < str.length(); i++)
      {
         hash = hash << 7 ^ str.charAt(i);
      }

      return hash;
   }
   /* End Of BP Hash Function */


   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;
   }
   /* End Of FNV Hash Function */


   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;
   }
   /* End Of AP Hash Function */

}

分享到:
评论

相关推荐

    常用的hash算法(java实现)

    在计算机科学中,哈希(Hash)算法是一种用于将任意长度的数据映射为固定长度输出的函数。这种输出通常称为哈希值或消息摘要。在Java编程语言中,实现哈希算法可以方便地用于数据验证、查找表以及密码存储等多种用途...

    20多个常用的Hash算法C++ 实现

    Hash函数集合,包含主流的hash函数: nginx_hash算法,OpenSSL_hash算法,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,DEKHash,APHash等等!

    C语言实现hash算法

    在IT领域,哈希算法(Hash Algorithm)是一种用于将任意长度的数据转化为固定长度输出的算法。这个过程通常称为哈希或散列。哈希算法在信息安全、数据完整性验证、密码学等多个方面都有着广泛的应用。本项目是用...

    hash算法相关介绍

    ### Hash算法相关介绍 在计算机科学领域,哈希(Hash)是一种将任意长度的数据映射为固定长度数据的技术。哈希算法广泛应用于多种场景中,包括但不限于数据完整性验证、密码存储、快速查找等。本文主要介绍了几种...

    Hash算法大全.txt

    本文档主要介绍了多种常见的Hash算法,并重点推荐了FNV1(Fowler–Noll–Vo)算法。 #### 二、Hash算法概述 Hash算法具有以下特点: - 输入可以是任意长度。 - 输出总是固定长度。 - 对于不同的输入,输出应当尽...

    hash算法C代码实现

    哈希(Hash)算法在计算机科学中扮演着重要的角色,特别是在数据存储、文件校验、信息安全等领域。本文将深入探讨哈希算法的原理,并提供一个简单的C语言实现示例。 哈希算法,又称为散列函数,是一种将任意长度的...

    Go-fasthashgo写的一个hash算法比标准hash算法的速度更快占用内存更低

    Go语言标准库中提供了多种内置的哈希函数,如`hash.Hash`接口,它支持`MD5`、`SHA1`、`SHA256`等常见算法。然而,在特定的应用场景下,我们可能需要更快、更节省内存的哈希算法,这正是`fasthash`项目所关注的。 `...

    Hash算法快速存取数据

    #### 六、常见的安全Hash算法 - **MD4**: MD4是MIT的Ronald L. Rivest于1990年设计的一种消息摘要算法,其输出长度为128位。虽然最初被认为是安全的,但现在已经被证明存在漏洞,不再推荐使用。 - MD4("") = 31d6...

    SPlayer视频文件hash算法 - Google Docs.rar_HASH播放器_HASH特征码_HASH算法_hash播

    标题中的"SPlayer视频文件hash算法"指的是射手播放器(SPlayer)用于识别和验证视频文件的一种特定技术。这种算法能够生成一个唯一哈希值(hash value),也称为特征码,来表示文件的内容。哈希算法在信息技术中广泛...

    常见的Hash算法.pdf

    在【标题】"常见的Hash算法.pdf"中,我们可以推断文件可能涵盖了多种常见的哈希算法,包括但不限于MD5、SHA-1、SHA-256等。这些算法各有特点,但它们的核心目标都是尽可能地减少输入数据的哈希碰撞,即不同的输入...

    几种常见的hash算法1

    标题和描述提到的“几种常见的hash算法1”主要是针对哈希算法在不同应用中的使用及其特性进行的探讨。 首先,哈希算法的理论基础是单向函数,它是一种在给定输入时容易计算输出,但在给定输出时难以反推输入的函数...

    HASH算法及其在数字签名中的应用.pdf

    #### 三、常见的Hash算法 目前常用的Hash算法包括MD4、MD5、SHA-1等。这些算法各有特点: - **MD4** 和 **MD5**:早期较为流行的Hash算法,但由于近年来发现的一些漏洞,它们的安全性受到了质疑,特别是对于强抗...

    7种Hash算法

    在本篇文章中,我们将深入探讨7种常见的哈希算法,以及如何使用C语言实现它们。 1. **MD5(Message-Digest Algorithm 5)** MD5是最著名的哈希函数之一,由Ronald Rivest在1991年设计。它产生一个128位(16字节)...

    HASH算法实例源码

    本文将基于提供的“HASH算法实例源码”进行详细讲解,包括哈希算法的基本概念、工作原理以及源码分析。 哈希算法,又称为散列函数,是一种能够将任意长度的输入(也叫做预映射或消息)转化为固定长度输出的函数。这...

    各种hash算法-hashcodeUtil

    《深入理解各种Hash算法与hashCodeUtil》 在计算机科学中,Hash算法扮演着至关重要的角色。它们是一种将任意长度的数据转换为固定长度输出的函数,通常用于数据索引、快速查找、消息摘要等场景。本篇文章将深入探讨...

    NSString+Hash(Objective-C)

    Objective-C 中 NSString 关于常见 Hash 算法的分类,能对字符串,文件进行 Hash 运算,具备 HMAC 功能。支持的 Hash 算法有:MD5、SHA1、SHA256、SHA512。

    Hash算法大全(java实现)参照.pdf

    在Java中,实现Hash算法有多种方法,这里我们将探讨几种常见的Hash算法及其Java实现。 1. **加法Hash**: 加法Hash算法是最简单的形式,通过将字符串中的每个字符的ASCII值累加,然后取模一个质数得到哈希值。这种...

Global site tag (gtag.js) - Google Analytics