散列(又叫Hash)和加密在身份校验、敏感信息传输等应用中用途广泛。
把他们放在一起写的原因是,网上太多资料,将散列和加密的概念混为一谈,误导性极大。
由于编码/解码运算和上述二者有一定的相似之处,因此放在这里一并讲述。
注:本文中,为了表述严谨,所有的“位”代表的是字符个数之意,而bit则指代计算机数据中的基本单位比特。
三者的共同点
它们都表述了一种映射关系,将原始数据A映射到新的数据B。
在散列运算中,B一般称之为摘要,英文为digest. 其代表算法有MD5,SHA1, SHA256等。从A -> B的运算,称之为散列、哈希;从B -> A的运算(严格意义上来说,它不算一种运算)是不存在的,当然可以通过一些其他的手段比如查表法来实现,这个在下文中会谈到。
在加密运算中,A一般称之为明文或原文,B一般称之为密文。A->B的运算,称为加密;反之,即为解密。
而在编码中,A->B的运算称为编码,反之为解码。
三者的区别
散列
在散列运算中,是将一个较长的数据A,运算成为一个较短的数据B,如MD5的128bits,SHA1的160bits。
以字符a举例,它的MD5值是0cc175b9c0f1b6a831c399e269772661。一共32个字节,每个字节占用8bit,为什么说MD5是128bit呢?原因在于这