哈希算法
来源:互联网 发布:卫星地图软件 编辑:程序博客网 时间:2024/05/17 22:10
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数
class GeneralHashFunctionLibrary
{/*RSHash*/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;
}
/*JSHash*/
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;
}
/*PJWHash*/
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;
}
/*ELFHash*/
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;
}
/*BKDRHash*/
public long BKDRHash(String str)
{
long seed = 131;//31131131313131131313etc..
long hash = 0;
for(int i = 0; i < str.length(); i++)
hash = (hash * seed) + str.charAt(i);
return hash;
}
/*SDBMHash*/
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;
}
/*DJBHash*/
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;
}
/*DEKHash*/
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;
}
/*BPHash*/
public long BPHash(String str)
{
long hash=0;
for(int i = 0;i < str.length(); i++)
hash = hash << 7 ^ str.charAt(i);
return hash;
}
/*FNVHash*/
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;
}
/*APHash*/
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;
}
}
0 0
- 算法 --- 一致性哈希算法
- 【算法】一致性哈希算法
- 算法 一致性哈希算法
- 【算法】一致性哈希算法详解
- 分布算法之一致性哈希算法
- 哈希算法(BDKR算法)
- 算法学习笔记15-哈希算法
- 算法导论之哈希算法
- 感知哈希算法(pHash算法)
- 哈希算法
- 哈希算法
- ELF哈希算法
- ELF 哈希算法
- 通用哈希算法
- Time33哈希算法
- 一致性哈希算法
- FNV哈希算法
- 哈希算法简介
- LeetCode_Longest Consecutive Sequence
- Linux的SOCKET编程详解
- C语言中的几个易错点-课堂笔记
- 我第一次尝试Java
- java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver解决方法!
- 哈希算法
- Shell教程
- 'tex2Dproj': no matching 2 paramete
- C++ tree(1)
- QPM 使用日志,接入第三方日志
- Unix Command
- 缓冲区的运用
- Just4Fun - Comparaison between const and readonly in C#
- day08-request&responseのPPT学习