随着信息技术和通信技术的不断进步,我们已经步入了智能工业时代。在这个时代,各种智能技术的应用正在推动着工业的升级和转型,人工智能技术、5G技术和工业互联网技术等新一代信息技术正在不断推进着时代进步和发展。
哈希算法的特征
除了快速对比内容外,Hash思想也经常被应用到基于内容的编址或命名算法中。一个优秀的Hash算法,将能满足:
正向快速:给定原文和Hash算法,tg_ xcui8在有限时间和有限资源内能计算得到Hash值;
逆向困难:给定Hash值,在有限时间内无法(基本不可能)逆推出原文,这也是哈希安全性的基础;
输入敏感:原始输入信息发生任何改变,新产生的Hash值都应该发生很大变化;
避免碰撞:很难找到两段内容不同的明文,使得它们的Hash值一致(即发生碰撞)。
可以看出,哈希算法因能快速验证、并防止数据或交易在传递过程中被篡改,在网络数据和区块链技术应用中有着重大作用,也是理解区块链为何具备安全可信特征的重要因素。
哈希值可以通过哈希算法获得,但是没有办法使用这个哈希值来反转输入字符串。这是单向的,基于此,区块链有效地保护了信息的安全。散列算法的第二个特点是防篡改——对于每一个输入,即使是很小的变化,散列变化也会非常大。此功能在连接块中起着关键作用。区块链的每个区块都标有前一个区块的哈希值,除非有人破坏了整条链上所有的哈希值,否则一旦数据写入链上,就无法进行操作。
The consistency hash algorithm proposes four definitions for determining the quality of a hash algorithm in a dynamically changing cache environment:
1.Balance:Balance refers to the ability of hash results to be distributed across all buffers as much as possible,allowing all buffer spaces to be utilized.Many hash algorithms can meet this condition.
2.Monotonicity:monotonicity means that if some content has been allocated to the corresponding buffer through hashing,new buffers are added to the system.The hash result should ensure that the previously allocated content can be mapped to the original or new buffer,without being mapped to other buffers in the old buffer set.
3.Spread:In a distributed environment,terminals may not see all the buffers,but only a portion of them.When a terminal wishes to map content onto a buffer through the hashing process,different terminals may see different buffer ranges,resulting in inconsistent hash results.The final result is that the same content is mapped to different buffers by different terminals.This situation should obviously be avoided,as it causes the same content to be stored in different buffers,reducing the efficiency of system storage.The definition of dispersion is the severity of the above situation.A good hash algorithm should be able to avoid inconsistencies as much as possible,which is to minimize dispersion.
4.Load:The problem of load is actually looking at dispersion from another perspective.Since different terminals may map the same content to different buffers,for a specific buffer,it may also be mapped to different content by different users.Like dispersion,this situation should also be avoided,so a good hash algorithm should be able to minimize the buffering load as much as possible.
使用了FNV1_32_HASH算法,如下:
public class HashUtil{
/**
*计算Hash值,使用FNV1_32_HASH算法
*param str
*return
*/
public static int getHash(String str){
final int p=16777619;
int hash=(int)2166136261L;
for(int i=0;i<str.length();i++){
hash=(hash^str.charAt(i))*p;
}
hash+=hash<<13;
hash^=hash>>7;
hash+=hash<<3;
hash^=hash>>17;
hash+=hash<<5;
if(hash<0){
hash=Math.abs(hash);
}
return hash;
}
}