课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
哈希函数是win在学习软件编程技术的时候需要重点掌握的一个函数关系应用知识,下面我们就通过案例分析来了解一下哈希函数的概念以及特点,希望通过对本文的阅读,大家在学习软件编程的时候对函数关系能够有更全面的了解。
一、哈希函数
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
哈希能够实现数据从一个维度向另一个维度的映射,通常使用哈希函数实现这种映射。通常业界使用y=hash(x)的方式进行表示,该哈希函数实现对x进行运算计算出一个哈希值y。
A、哈希算法的特点
l、哈希算法接受一段明文后,以一种不可逆的方式,将其转化为一段长度较短、位数固定的散列数据,计算高效。
l、collision-free即冲突概率小,如果两个哈希值是不相同的(根据同一函数),那么这两个哈希值的原始输入也是不相同的;如果两个哈希值相同,两个输入值很可能是相同的,但不绝对肯定二者一定相等(可能出现哈希碰撞)。
l、能够隐藏原始信息:例如区块链中各个节点之间对交易的验证只需要验证交易的信息熵,而不需要对原始信息进行比对,节点间不需要传输交易的原始数据只传输交易的哈希即可,常见算法有SHA系列和MD5等算法。
l、加密过程不可逆,即无法通过输出的散列数据倒推原本的明文是什么。
l、输入的明文与输出的散列数据一一对应,任何一个输入信息的变化,都必将导致终输出的散列数据的变化,冲突的概率非常小。
二、哈希的用法
哈希在区块链中用处广泛,其一我们称之为哈希指针(HashPointer),哈希指针是指该变量的值是通过实际数据计算出来的且指向实际的数据所在位置,即其既可以表示实际数据内容又可以表示实际数据的存储位置。
HashPointer在区块链中主要有两处使用,一个就是构建区块链数据结构,从上面的区块数据结构中就可以知道,每个区块都包含了上一个区块的hash值(即hashpointer),这样的好处在于后面区块可以查找前面所有区块中的信息,而且区块的HashPointer的计算包含了前面区块的信息从而一定程度上保证了区块链的不易篡改的特性。二个就是用于构建MerkleTree.,MerkleTree的各个节点使用HashPointer进行构建。
哈希还在其他技术中有所应用例如:交易验证以及数字签名等等。
三、加密算法
加密就是通过一种算法将原始信息进行转换,接收者能够通过密钥对密文进行解密还原成原文的过程。加密算法的典型组件有加解密算法、加密密钥和解密密钥。其中加解密算法是固定不变和公开可见的;密钥则不固定而且需要保护起来,一般来说,对同一种算法,密钥长度越长,则加密强度越大。
加密过程即通过加密算法和加密密钥,对明文进行加密,获得密文。
解密过程即通过解密算法和解密密钥,对密文进行解密,获得明文。
根据加解密的密钥是否相同,算法可以分为对称加密(symmetriccryptography,又称公共密钥加密,common-keycryptography)和非对称加密(asymmetriccryptography,又称公钥加密,public-keycryptography)。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成混合加密机制。
并非所有加密算法的强度都可以从数学上进行证明。公认的高强度加密算法是在经过长时间各方面实践论证后,被大家所认可,不代表其不存在漏洞。但任何时候,自行发明加密算法都是一种不太明智的行为。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。