java加密解密研究5、消息摘要算法简介

一、消息摘要算法的概述

我们之前介绍过散列函数,就是用散列(Hash)函数来验证数据的完整性。任何消息经过散列函数处理后,都会获得唯一的散列值。这一过程称为“消息摘要”,其散列值称为“数字指纹”,自然其算法就是“消息摘要算法”。换句话说,如果其数字指纹唯一,就说明其消息是一致的。

消息摘要算法又称为散列算法,其核心在于散列函数的单向性。即通过散列函数可获得对应的散列值,但不可通过该散列值反推原始信息。这是消息摘要算法的安全性的根本所在。

消息摘要算法主要分为三大类:MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)和MAC(Message Authentication Code,消息认证码算法)。

MD系列算法包括MD2、MD4、MD5共三种算法。

SHA系列算法主要包括SHA-1和SHA-2系列算法(包含SHA-224、SHA-256、SHA-384、SHA-512)

MAC算法综上了两种算法,主要包括HmacMd5、HmacSHA1、HmacSHA256、HmacSHA384、HmacSHA512算法。

最后,

基于这些算法,又衍生出了RipeMd系列算法(包含RipeMd128、RipeMd160、RipeMd320)、Tiger、GOST3411和Whirlpool算法。


二、消息摘要算法的特征

消息摘要是把任意长度的输入柔和而产生长度固定的伪随机输入的算法。消息摘要的主要特点有:  

①无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出,SHA-1的变体可以产生192比特位和256比特位的消息摘要。一般认为,摘要的最终输出越长,该摘要算法就越安全。  

②消息摘要看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。 

③一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。这正是好的消息摘要算法所具有的性质:输入改变了,输出也就改变了;两条相似的消息的摘要确不相近,甚至会大相径庭。 

④消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。当然,可以采用强力攻击的方法,即尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。但实际上,要得到的信息可能是无穷个消息之一,所以这种强力攻击几乎是无效的。

⑤好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,无法找到两条消息,是它们的摘要相同。



你可能感兴趣的:(java,Algorithm,算法,加密,解密,Authentication)