哈希用途

哈希算法用于将任意长度的数据映射为固定长度的哈希值,常用于快速查找和数据完整性检验。简单的哈希函数可能存在冲突,而哈希表提供O(1)的查找效率但可能导致空间浪费。MD5和SHA-1是两种经典的哈希算法,常用于加密和数据校验,其中SHA-1相对较安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

哈希又称为散列

哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。

哈希函数

一个简单的哈希函数例子,下面的这个函数参数为:给定的字符串key和长度值,输出结果为0到nTableLength -1的数值,用此函数可以创建长度为nTableLength 的数组,将nTableLength个字符串填充到nTableLength长度的数组中,每个字符串的索引用下面的函数唯一生成。

*注*下面函数问题:没有处理冲突,即两个不同的字符串可能生成相同的哈希值,好的哈希函数会有很好的防冲突处理。比如python中的字典就是用的哈希表实现的,但是不会出现两个key产生相同的哈希值。

unsigned long Hash( const char *key, int nTableLength )
{
    unsigned long nHash = 0;
   
    while (*key)
    {
        nHash = (nHash<<5) + nHash + *key++;
    }
        
    return ( nHash % nTableLength );
}

快速查找

上述哈希函数的特性可以看出,可以将任意的二进制东西哈希成数组的index,这样就可以将任意的东西根据哈希值做成数组,然后在需要使用该数据的时候就可以根据哈希值(index)在数组中进行索引即可,这样做成的表称为哈希表,通过事先做好的哈希表,然后通过哈希函数生成哈希值进行查找的速度为O(1),查找非常快速。

缺点:由于哈希值并不是严格的顺序,即可能是1,6,7等跳着的数据,这样会带来空间上的浪费。

经典的哈希算法

MD2、MD4、MD5 和 SHA-1


MD5

MD5使用的哈希函数,将任意的数据生成128位的数据。

用途1:可以用来加密

将很短的密码比如生日,生成128位看不出特殊意义的数据,这样即使数据库被盗,黑客拿到的也只是128位的MD5值。

用途1缺点:如果用一系列生日生成128位数据,然后挨个对比也可以进行暴力破解。

用途1对策:比如网站保存用户密码时,生成MD5密码可以用用户名+密码+特殊字符的形式进行生成MD5,这也是传说中的加salt处理。

用途2:可以进行校验

从远程下载的大数据,在传输过程中可能会发生错误,MD5的任何的不同数据生成的MD5值都是不同的。这样传输前生成的MD5值,在传输后再生成MD5值进行对比即可知道是否有传输错误发生。


SHA-1

SHA-1用途和MD5一样,只不过SHA-1加密生成的数据为160,方法更复杂,相对更安全一些。

<完>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值