美文网首页
摘要算法

摘要算法

作者: Astrophel_06c5 | 来源:发表于2018-03-30 10:43 被阅读0次

    SHA-1

    SHA-1算法可以从明文生成160bit的信息摘要,示例如下:

    给定明文: abcd

    SHA-1摘要: 81FE8BFE87576C3ECB22426F8E57847382917ACF

    SHA-1 与 MD5的主要区别是什么呢?

    1.摘要长度不同

    MD5的摘要的长度为128bit,SHA-1摘要长度160bit。多出32bit意味着什么呢?不同明文的碰撞几率降低了2^32 = 324294967296倍。

    2.性能略有差别

    SHA-1生成摘要的性能比MD5略低。

    SHA-2

    SHA-2是一系列SHA算法变体的总称,其中包含如下子版本:

    SHA-256:可以生成长度256bit的信息摘要。

    SHA-224:SHA-256的“阉割版”,可以生成长度224bit的信息摘要。

    SHA-512:可以生成长度512bit的信息摘要。

    SHA-384:SHA-512的“阉割版”,可以生成长度384bit的信息摘要。

    MD5

    是信息摘要的一种实现,它可以从任意长度的明文字符串生成128位哈希值

    摘要哈希生成的正确姿势是什么样呢?分三步:

    1.收集相关业务参数,在这里是金额和目标账户。当然,实际应用中的参数肯定比这多得多,这里只是做了简化。

    2.按照规则,把参数名和参数值拼接成一个字符串,同时把给定的密钥也拼接起来。之所以需要密钥,是因为攻击者也可能获知拼接规则。

    3.利用MD5算法,从原文生成哈希值。MD5生成的哈希值是128位的二进制数,也就是32位的十六进制数。

    MD5.png

    考虑把多种摘要算法结合使用比如

    明文: abcd

    MD5摘要:

    e2fc714c4727ee9395f324cd2e7f331f

    SHA-256摘要:

    88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589

    合成摘要:

    e2fc714c4727ee93 209c897823b9217da3e161936f031589

    取MD5摘要的前16位,取SHA-256的后32位

    MD5算法底层原理:

    简单概括起来,MD5算法的过程分为四步:处理原文设置初始值循环加工,拼接结果

    第一步:处理原文

    首先,计算出原文长度(bit)对512求余的结果,如果不等于448,就需要填充原文使得原文对512求余的结果等于448。填充的方法是第一位填充1,其余位填充0。填充完后,信息的长度就是512*N+448。

    之后,用剩余的位置(512-448=64位)记录原文的真正长度,把长度的二进制值补在最后。这样处理后的信息长度就是512*(N+1)。

    第二步:设置初始值

    MD5的哈希结果长度为128位,按每32位分成一组共4组。这4组结果是由4个初始值A、B、C、D经过不断演变得到。

    第三步:循环加工

    这一步是最复杂的一步,我们看看下面这张图,此图代表了单次A,B,C,D值演变的流程。


    循环加工.png

    图中,A,B,C,D就是哈希值的四个分组。每一次循环都会让旧的ABCD产生新的ABCD。一共进行多少次循环呢?由处理后的原文长度决定。

    假设处理后的原文长度是M

    主循环次数 = M / 512

    每个主循环中包含 512 / 32 * 4 = 64 次 子循环。

    上面这张图所表达的就是单次子循环的流程。

    1.图中的绿色F,代表非线性函数

    2.红色的田字代表相加

    3.黄色的<<<S(左移S位)

    4.Mi是第一步处理后的原文。在第一步中,处理后原文的长度是512的整数倍。把原文的每512位再分成16等份,命名为M0M15,每一等份长度32。在64次子循环中,每16次循环,都会交替用到M1M16之一。

    5.ki 一个常量,在64次子循环中,每一次用到的常量都是不同的

    第四步:拼接结果

    这一步就很简单了,把循环加工最终产生的A,B,C,D四个值拼接在一起,转换成字符串即可。

    简而言之,MD5把128bit的信息摘要分成A,B,C,D四段(Words),每段32bit,在循环过程中交替运算A,B,C,D,最终组成128bit的摘要结果。

    SHA算法与MD5区别

    SHA-1算法,核心过程大同小异,主要的不同点是把160bit的信息摘要分成了A,B,C,D,E五段。

    SHA-2系列算法,核心过程更复杂一些,把信息摘要分成了A,B,C,D,E,F,G,H八段。

    其中SHA-256的每一段摘要长度是32bit,SHA-512的每一段摘要长度是64bit。SHA-224和SHA-384则是在前两者生成结果的基础上做出裁剪。

    相关文章

      网友评论

          本文标题:摘要算法

          本文链接:https://www.haomeiwen.com/subject/uciuqftx.html