Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。
百度百科给出的散列算法的解释如上,个人理解散列算法就是给个输入通过散列算法后输出得道固定长度的输出。
输入—>散列算法—>输出(固定长度)
第一个接触的散列算法应该是MD5吧…学JavaWeb的时候做密码加密。虽然现在已经不推荐使用了。
0.散列算法的特点
a.固定长度
b.不可逆
c.高速存储“空间换时间”
…先这些想到再加
1.常用散列算法
MD5,SHA这种的就不列了,我们说点基础的…
a.除余法
除余法就是用关键码a % M,并取余数作为散列地址。除余法几乎是最简单的散列方法,散列函数为: h(x) = x % M。
//取余法
public int remainderHash(int a)
{
int b = 0;
b = a % 10;
return b;
}
b.乘法
这种类型的Hash函数利用了乘法的不相关性(乘法的这种性质,最有名的莫过于平方取头尾的随机数生成算法,虽然这种算法效果并不好)
static int bernsteinHash(String key)
{
int hash = 0;
int i;
for (i=0; i<key.length(); ++i) {
hash = 33