# 根据字符串生成对应Hash值

• 根据字符串生成Hash值 唯一ID值
• 一丶Hash函数
• 1.APHash
• 2.RsHash
• 3.jsHash
• 4.PJW Hash
• 5.ELF Hash
• 6.BKDR Hash
• 7.SDMB Hash
• 8.DJB Hash
• 9.DEKHash
• 二丶代码下载

# 根据字符串生成Hash值 唯一ID值

## 一丶Hash函数

### 1.APHash

```APHash

uint32_t hash(const char* message, size_t message_length)
{
uint32_t internal_state = 0xA5A5A5A5; // IV: A magic number
uint32_t message_block = 0;

// Loop over the message 32-bits at-a-time
while (message_length >= 4)
{
memcpy(message_block, message, sizeof(uint32_t));

internal_state = mix(message_block, internal_state);

message_length -= sizeof(uint32_t);
message        += sizeof(uint32_t);
}

// Are there any remaining bytes?
if (message_length)
{
memcpy(message_block, message, message_length);
internal_state = mix(message_block, internal_state);
}

return internal_state;
}

// AP Hash Function
unsigned int APHash(char *str)
{
unsigned int hash = 0;
int i;

for (i=0; *str; i++)
{
if ((i & 1) == 0)
{
hash ^= ((hash << 7) ^ (*str++) ^ (hash >> 3));
}
else
{
hash ^= (~((hash << 11) ^ (*str++) ^ (hash >> 5)));
}
}

return (hash & 0x7FFFFFFF);
}```

### 2.RsHash

```unsigned int RSHash(const char* str, unsigned int length)
{
unsigned int b    = 378551;
unsigned int a    = 63689;
unsigned int hash = 0;
unsigned int i    = 0;

for (i = 0; i < length; ++str, ++i)
{
hash = hash * a + (*str);
a    = a * b;
}

return hash;
}```

### 3.jsHash

```unsigned int JSHash(const char* str, unsigned int length)
{
unsigned int hash = 1315423911;
unsigned int i    = 0;

for (i = 0; i < length; ++str, ++i)
{
hash ^= ((hash << 5) + (*str) + (hash >> 2));
}

return hash;
}```

### 4.PJW Hash

```nsigned int PJWHash(const char* str, unsigned int length)
{
const unsigned int BitsInUnsignedInt = (unsigned int)(sizeof(unsigned int) * 8);
const unsigned int ThreeQuarters     = (unsigned int)((BitsInUnsignedInt  * 3) / 4);
const unsigned int OneEighth         = (unsigned int)(BitsInUnsignedInt / 8);
const unsigned int HighBits          =
(unsigned int)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth);
unsigned int hash = 0;
unsigned int test = 0;
unsigned int i    = 0;

for (i = 0; i < length; ++str, ++i)
{
hash = (hash << OneEighth) + (*str);

if ((test = hash & HighBits) != 0)
{
hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));
}
}

return hash;
}```

### 5.ELF Hash

```unsigned int ELFHash(const char* str, unsigned int length)
{
unsigned int hash = 0;
unsigned int x    = 0;
unsigned int i    = 0;

for (i = 0; i < length; ++str, ++i)
{
hash = (hash << 4) + (*str);

if ((x = hash & 0xF0000000L) != 0)
{
hash ^= (x >> 24);
}

hash &= ~x;
}

return hash;
}```

### 6.BKDR Hash

```unsigned int BKDRHash(const char* str, unsigned int length)
{
unsigned int seed = 131; /* 31 131 1313 13131 131313 etc.. */
unsigned int hash = 0;
unsigned int i    = 0;

for (i = 0; i < length; ++str, ++i)
{
hash = (hash * seed) + (*str);
}

return hash;
}```

### 7.SDMB Hash

```unsigned int SDBMHash(const char* str, unsigned int length)
{
unsigned int hash = 0;
unsigned int i    = 0;

for (i = 0; i < length; ++str, ++i)
{
hash = (*str) + (hash << 6) + (hash << 16) - hash;
}

return hash;
}```

### 8.DJB Hash

```unsigned int DJBHash(const char* str, unsigned int length)
{
unsigned int hash = 5381;
unsigned int i    = 0;

for (i = 0; i < length; ++str, ++i)
{
hash = ((hash << 5) + hash) + (*str);
}

return hash;
}```

### 9.DEKHash

```unsigned int DEKHash(const char* str, unsigned int length)
{
unsigned int hash = len;
unsigned int i    = 0;

for (i = 0; i < length; ++str, ++i)
{
hash = ((hash << 5) ^ (hash >> 27)) ^ (*str);
}

return hash;
}```

## 二丶代码下载

0 条评论

• ### 逆向知识第十二讲,识别全局变量,静态全局变量,局部静态变量,以及变量.

逆向知识第十二讲,识别全局变量,静态全局变量,局部静态变量,以及变量. 一丶认识全局的 (静态变量 全局变量) 高级代码: int RetIn...

• ### C语言第七讲,函数入门.

C语言第七讲,函数入门. 一丶了解面向过程和面向对象的区别. 为什么要先讲面向过程和面向对象的区别? 面向过程,就是什么都要自己做.  比...

• ### 学习逆向知识之用于游戏外挂的实现.第二讲,快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

通过游戏外挂,学习逆向技术之快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

• ### QQ空间

现在21世纪，有人称之为大数据时代，谁有数据量大的数据，谁能够从海量数据中提取到有用信息，并能够将其转换为资本，谁就取得了互联网的地位。

• ### 递归

版权声明：本文为博主原创文章，转载请注明博客地址： https://blog.csdn.ne...

• ### Python基于模块Paramiko实现SSHv2协议

ssh是一个协议，OpenSSH是其中一个开源实现，paramiko是Python的一个库，实现了SSHv2协议(底层使用cryptography)。

• ### win10下mysql5.5.升级到mysql5.7

几天写了个小项目，在ecs上装了个mysql5.7，结果程序报语法错误了，检查本机上没有问题，怀疑就是MySQL版本问题了，一查本地mysql版本5.5.27，...

• ### [剑指offer][Java]二叉搜索树的后序遍历序列

输入一个整数数组，判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。