一、一致性/签名算法
这类算法有很多,流行的有MD4/MD5(128bit)、SHA-1(160bit)、SHA-2(含SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256)、HMAC等。MD即Message Digest,SHA即Secure Hash Algorithm,他们的本质都是HASH(哈希/散列)算法。
(一)HASH介绍
HASH是一种将可变长的字符串(甚至无限长)变成固定长度输出(即消息摘要)的算法,算法很多,比如映射为128位(MD5)。为什么可变长能映射到固定长度呢?首先是对可变长的字符串信息进行切割分组(比特级别的分组),形成原始“信息料”。然后将这些信息料逐一喂给内部的“压缩算法”,相当于对信息不断循环进行压缩,最后压缩成一个固定长度的字符串。开始时候,涉及一个初始输入,谓之“初始向量”。所谓的压缩算法,就是各种异或和移位操作。理想情况一般是:固定长度字符串的每个字符,都能尽量关联输入字符串的所有字符信息;同样,输入端的任何一个字符改变,都能均匀地反映到输出端所有字符上,比如输入差别一个字符,输出完全不一样(即雪崩效应)。除了寻址空间变大外,这个集中性和均匀性映射关系就是各类算法努力的方向。
(二)MD2介绍
上述的这些算法,他们的鼻祖其实是MD2,只是后来者位数更多,算法更优而已,思路大体还是沿用MD2的,所以这里大概介绍一下MD2设计思路。
MD2