加密哈希函数和非加密哈希函数的区别:1、安全性不同;2、作用不同;3、使用场景不同。安全性不同是指加密哈希函数是一种安全性更高的哈希函数,它可以提供一定的数据完整性保护和数据防篡改能力,非加密哈希函数安全性较低。
一、加密哈希函数和非加密哈希函数的区别
1、安全性不同
加密哈希函数:加密哈希函数是一种安全性更高的哈希函数,它可以提供一定的数据完整性保护和数据防篡改能力。加密哈希函数使用高强度的算法,如SHA-256、SHA-512、MD5等,能够抵御一定的攻击手段,并且具有更高的安全性保障。
非加密哈希函数:非加密哈希函数虽然也可以被用于数据校验和其他类似的场景,但是其安全性相对较低,易受到暴力破解、冲突攻击等攻击手段的影响。
2、作用不同
加密哈希函数:加密哈希函数旨在保证一系列的安全属性。它们大部分都很难发生碰撞或是被找出加密的原文,而且哈希值看起来是随机的。
非加密哈希函数:非加密哈希函数只是尽力去避免非恶意输入产生的碰撞;或是用于检测出数据的意外改变(CRC,循环冗余校验);还有一些用于将Object分配到hash table的不同的哈希桶(hash table是一种数据结构,可以参考java中hash table的实现)中,并尽量产生较少的碰撞。由于较弱的要求,这些哈希函数数目很多。
3、使用场景不同
加密哈希函数:加密哈希函数主要用于数字签名、消息认证码等需要保证数据可靠性和安全性的场景。
非加密哈希函数:非加密哈希函数则更多地被用于简单数据校验、散列函数、校验和计算等场景。
二、加密哈希函数简介
加密哈希函数是一个哈希函数,它接受输入或消息并转换为固定大小的字节串。该字节串被称为哈希值或消息。加密哈希函数的主要功能是在由逻辑和数学支配的无需信任的网络中确保信息的完整性。它旨在确保拥有区块数据副本的所有网络用户间的通信是可信的。加密哈希函数可以输入任何字符串,并且只会产生固定长度的输出值,还具有高效的计算速率。
加密哈希函数的属性:
1、无冲突的(Collision-free)
不同的Input,一定会产生不同的输出结果,也就是不同的哈希值。因此,当A和B的哈希值相同,就证明了A等于B,比如说如果我生日数字的哈希值,和你生日数字的哈希值一样时,就表示我们的生日一样。这有什么用呢?最主要的是,它让我们可以很进行高效的验证。假设我今天手中有两本书,看起来好像一样,但我又没办法确定,除非我一页页每一个字去核对,要花费相对多时间。其实,我只要取得这两本书的哈希值,就能轻易验证这两本书是不是一模一样。
2、函数是单向的(Hiding)
很难从哈希值,倒推回去算出输出值。也就是说,你可以对密码和档案Hash之后,拿来使用、验证、发布,而不会危及你密码的安全性。
3、支持解谜的(Puzzle-friendly)
具体来说,就是无法依靠选择,产生出你想要指定的哈希值,比如你想要让哈希值是111111,你无法知道要输入什么字串,只能不停尝试,直到111111出现为止。你肯定常常听到的“挖矿”,其实就是矿工们去竞争、去寻找一个随机常数,让整个区块的哈希值落在目标区域内。今天先不谈这个,只是先让你知道Puzzle-friendly属性对于加密货币领域也是相对重要的一环。
三、非加密哈希函数简介
只是试图避免非恶意输入的冲突。作为较弱担保的交换,它们通常更快。如果数据量小,或者不太在意哈希碰撞的频率,甚至可以选择生成哈希值小的哈希算法,占用更小的空间。常见的非加密哈希有MurMurHash,CRC32,DJB等。
延伸阅读
哈希函数简介
哈希函数指将哈希表中元素的关键键值映射为元素存储位置的函数。一般的线性表,树中,记录在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较”的基础上,查找的效率依赖于查找过程中所进行的比较次数。 理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。
文章标题:加密哈希函数和非加密哈希函数的区别,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/48530