哈希又称作“散列”,是一种数学计算机程序,它接收任何一组任意长度的输入信息,通过哈希算法变换成固定长度的数据指纹输出形式,如字母和数字的组合,该输出就是“哈希值”。
hash优点展示
如果两个哈希值是不相同的(根据同一函数),哈希開发V+(Whi366) 那么这两个散列值的原始输入一定是不相同的。
如果两个哈希值相同,两个输入值很可能(极大概率)是相同的,但也可能不同,这种情况称为“哈希碰撞”
抗篡改能力:对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。
它是一种单向函数是“非对称”的,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。
散列函数构造方法主要结合六点:
1.折叠法
2.数字分析法
3.平方取中法
4.随机法
5.直接地址法
6.除留余法
//ELF Hash Function
unsigned int ELFHash(char*str)
{
unsigned int hash=0;
unsigned int x=0;
while(*str)
{
hash=(hash<<4)+(*str++);//hash左移4位,当前字符ASCII存入hash低四位。
if((x=hash&0xF0000000L)!=0)
{//如果最高的四位不为0,则说明字符多余7个,如果不处理,再加第九个字符时,第一个字符会被移出,因此要有如下处理。
//该处理,如果对于字符串(a-z或者A-Z)就会仅仅影响5-8位,否则会影响5-31位,因为C语言使用的算数移位
hash^=(x>>24);
//清空28-31位。
hash&=~x;
}
}
//返回一个符号位为0的数,即丢弃最高位,以免函数外产生影响。(我们可以考虑,如果只有字符,符号位不可能为负)
return(hash&0×7FFFFFFF);
}
常见哈希算法
目前常见的Hash算法包括国际上的Message Digest(MD)系列和Secure Hash Algorithm(SHA)系列算法,以及国内的SM3算法。
例如计算
“hello blockchain world,this is yeasy github”的SHA-256 Hash值,
得到的结果将是
“db8305d71a9f2f90a3e118a9b49a4c381d2b80cf7bcef81930f30ab1832a3c90”。
对于某个文件,无需查看原始内容,只要其SHA-256 Hash计算后结果相同,则说明该文件内容极大概率就是一样的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。