hash算法

hash 算法

简单来说:hash(散列、杂凑)函数,是将任意长度的数据映射到有限长度的域上。直观解释起来,就是对一串数据 m 进行杂糅,输出另一段固定长度的数据 h,作为这段数据的特征(指纹)。

由于用途的不同,hash 在数据结构中的含义【hashCode()】和密码学【md5,sha1,sha256】中的含义并不相同,所以在这两种不同的领域里,算法的设计侧重点也不同。

数据结构 hash

1
string、int、bool、object hashCode()

密码学 hash

1
2
3
4
5
6
7
| 算法   | bit 位数 | 16 进制字符串                                |
| ------ | -------- | -------------------------------------------- |
| md5 | 128 | e10adc3949ba59abbe56e057f20f883e |
| sha1 | 160 | 7c4a8d09ca3762af61e59520943dc26494f8941b |
| sha256 | 256 | 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a8... |
| crc32 | 32 | 70930f27 |
| fnv | 32 | - |

其他工具

1
2
3
fnv:FNV能快速hash大量数据并保持较小的冲突率,它的高度分散使它适用于hash一些非常相近的字符串,比如URL,hostname,文件名,text,IP地址等。
base64:编码后的数据比原始数据略长,为原来的4/3,用64个可见字符表示数据a-z A-Z 0-9 + / ,可序列化可反序列化
urlencode:url中只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*'(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。