Hash算法实验原理及哈希函数简介
hash原理和实现方式

Hash原理和实现方式1. 介绍Hash(哈希)是一种将任意长度的输入数据转换为固定长度输出的算法。
该算法通过将输入数据映射到一个固定大小的哈希值来实现。
哈希函数通常用于数据完整性校验、密码学以及数据索引等领域。
本文将详细解释Hash的基本原理和实现方式,并介绍一些常见的Hash算法。
2. Hash函数基本原理Hash函数是Hash算法的核心组成部分,它接受任意长度的输入数据,并生成一个固定长度的哈希值。
2.1 确定性Hash函数应该是确定性的,即对于相同的输入数据,始终生成相同的哈希值。
这样可以保证在相同条件下产生相同结果,便于验证和比较。
2.2 均匀性理想情况下,Hash函数应该能够将不同的输入数据均匀地映射到不同的哈希值上。
这样可以最大程度地避免冲突,提高哈希表等数据结构的效率。
2.3 不可逆性Hash函数应该是不可逆的,即从哈希值无法推导出原始输入数据。
这样可以保护敏感信息和密码等重要数据的安全。
2.4 固定长度Hash函数应该生成固定长度的哈希值,无论输入数据的长度如何。
这样可以方便存储和比较哈希值。
3. Hash算法实现方式Hash算法有多种实现方式,下面介绍几种常见的实现方式。
3.1 分组Hash算法分组Hash算法将输入数据分成多个固定大小的块,然后对每个块进行处理,并生成最终的哈希值。
3.1.1 MD5(Message Digest Algorithm 5)MD5是一种广泛使用的分组Hash算法,它接受任意长度的输入数据,并生成一个128位(16字节)的哈希值。
MD5主要用于数据完整性校验和密码存储等领域。
然而,由于其安全性较低和易受到碰撞攻击,已经不再推荐使用。
3.1.2 SHA-1(Secure Hash Algorithm 1)SHA-1是一种与MD5类似的分组Hash算法,它接受任意长度的输入数据,并生成一个160位(20字节)的哈希值。
SHA-1在密码学领域中仍然广泛使用,但也存在安全性问题。
hash的原理

hash的原理一、概述哈希函数是一种将任意长度的消息映射为固定长度的消息摘要的函数。
哈希函数具有不可逆性、唯一性和抗碰撞能力等特点,常用于数据加密、数字签名、身份验证等领域。
二、哈希算法分类常见的哈希算法包括MD5、SHA-1、SHA-256等。
其中,MD5和SHA-1已经被证明存在安全漏洞,不再被推荐使用;而SHA-256则是目前最为广泛使用的哈希算法之一。
三、哈希函数原理1. 哈希函数输入哈希函数通常接收一个输入消息M,并将其转换为一个固定长度的摘要D。
D通常是一个二进制串,可以表示为16进制数或64位字符串。
2. 哈希函数输出哈希函数输出通常具有以下特点:(1)唯一性:对于任意不同的输入消息M,其输出D是唯一的。
(2)不可逆性:无法通过D推导出M。
(3)抗碰撞能力:很难找到两个不同的输入消息M1和M2,使得它们的输出D1和D2相同。
3. 哈希函数实现原理哈希函数实现原理通常包括以下步骤:(1)消息填充:将输入消息M填充到一个固定长度的块,通常是512位或1024位。
(2)初始向量:选择一个初始向量IV,用于初始化哈希函数。
(3)压缩函数:对每个填充块进行压缩操作,生成一个中间状态H。
(4)输出转换:对中间状态H进行处理,生成最终的哈希值D。
四、哈希算法应用1. 数据加密哈希函数可以用于数据加密,将敏感数据转换为不可逆的摘要。
通常情况下,用户输入密码时,系统会将其转换为摘要并存储在数据库中。
当用户再次登录时,系统会将用户输入的密码与存储在数据库中的摘要进行比较,以验证用户身份。
2. 数字签名数字签名是一种用于验证文档完整性和认证发送方身份的技术。
数字签名通常包括以下步骤:(1)使用哈希函数对文档进行摘要计算。
(2)使用私钥对摘要进行加密,并形成数字签名。
(3)将数字签名与文档一起发送给接收方。
(4)接收方使用公钥解密数字签名,并使用哈希函数计算文档的摘要。
如果两个摘要相同,则说明文档完整且发送方身份得到验证。
hash原理和实现方式

hash原理和实现方式Hash原理是一种将数据映射到固定长度的唯一标识的算法。
它的基本原理是将输入数据通过哈希函数进行计算,生成固定长度的哈希值作为输出。
哈希函数具有以下特点:1.唯一性:对于任何不同的输入,哈希函数都应该生成不同的哈希值。
2.高效性:哈希函数计算速度应该尽可能快,将输入数据转换为哈希值的过程应该是高效的。
3.一致性:当输入数据不变时,哈希值也不应该变化。
4.不可逆性:根据哈希值不能反推出原始数据。
5.均匀性:哈希函数应该能够将不同大小的输入数据映射到固定长度的哈希值上,且均匀分布。
实现方式有多种,下面介绍常见的几种实现方式:1. 散列链表(Hash Table with Linked Lists):散列链表是一种简单的哈希实现方式。
它使用数组作为存储数据的主要数据结构,当发生哈希冲突时,使用链表来存储冲突的元素。
每个元素通过哈希函数计算出一个索引值,然后被插入到该索引对应的链表中。
这种实现方式的优点是易于实现,但是当哈希冲突较多时,效率会降低。
2. 开放定址法(Open Addressing):开放定址法是另一种哈希实现方式,它不使用链表来存储冲突的元素,而是将冲突的元素直接放在数组中的其他位置。
当发生哈希冲突时,继续寻找数组中的下一个空槽位,直到找到一个空槽位或者遍历整个数组。
这种实现方式的优点是无需额外的链表结构,可以提高存储密度和查询效率。
但是,如果哈希表已满,插入新元素的时间复杂度可能会增加。
3. 拉链法(Chaining):拉链法是一种解决哈希冲突的方法,它在每个哈希表槽位上维护一个链表。
当发生哈希冲突时,将冲突的元素放入对应的链表中。
这种实现方式的优点是可以处理大量的哈希冲突,并且不需要额外的空间。
缺点是需要维护额外的链表结构,查询效率可能会降低。
4. 一致性哈希(Consistent Hashing):一致性哈希是一种用于分布式系统中的哈希实现方式。
它通过在哈希空间中使用虚拟节点,将哈希空间映射到环形空间上。
hash的原理和实际应用

Hash的原理和实际应用1. 什么是HashHash(哈希)是一种常用的数据结构,用于将数据快速地映射到一个固定大小的、唯一的哈希值上。
在计算机科学中,哈希函数把不同大小的输入映射到固定大小的输出。
2. Hash的原理Hash函数的核心思想是将输入通过特定的算法运算,转换为一个固定长度的哈希值。
这个哈希值在理想情况下应该具有以下特点:•唯一性:不同的输入应该生成不同的哈希值。
•一致性:相同的输入应该生成相同的哈希值。
•高效性:哈希计算应该快速且高效。
常见的Hash算法有MD5、SHA-1、SHA-256等。
这些算法使用不同的运算方式,以满足上述特点。
其中,MD5是一种广泛使用的哈希算法,它能够将任意长度的输入数据转换为一个128位的哈希值。
3. Hash的实际应用Hash在计算机科学和软件工程领域有着广泛的应用,下面列举了几个常见的实际应用场景:3.1 数据完整性校验在网络传输中,为了保证数据的完整性,常常使用Hash来验证数据是否被篡改。
发送方在发送数据之前计算数据的哈希值,并附加在数据中一起传输。
接收方在接收到数据后,重新计算数据的哈希值,并与接收到的哈希值进行比较。
如果哈希值不一致,说明数据可能被篡改。
3.2 密码存储在用户密码存储方面,常常使用Hash来加密和存储用户的密码。
当用户注册时,系统会使用Hash算法对用户输入的密码进行哈希运算,并将哈希值存储到数据库中。
当用户登录时,系统会将用户输入的密码进行哈希计算,并与存储的哈希值进行比较,以验证用户的身份。
3.3 唯一性校验在数据库中,为了确保数据的唯一性,常常使用Hash来生成唯一的标识符。
例如,在分布式系统中,多个节点同时接收到相同的请求时,为了避免重复处理,可以使用Hash算法对请求的关键信息进行哈希计算,得到一个唯一的标识符,通过标识符来判断是否已经处理过该请求。
3.4 数据索引在数据库和搜索引擎中,为了提高数据的检索效率,常常使用Hash来构建索引。
简述哈希算法的原理与应用

简述哈希算法的原理与应用1. 哈希算法的原理哈希算法(Hash Algorithm)也称为散列函数,是一种将任意长度的输入数据映射为固定长度散列(哈希)值的函数。
哈希算法具有以下特点: - 输入数据的长度可以不同,但哈希值的长度是固定的。
- 相同的输入数据始终会得到相同的哈希值。
- 即使输入数据稍有变动,得到的哈希值也会完全不同。
哈希算法的原理主要包括以下几个步骤: 1. 输入数据转换:哈希算法将输入数据进行适当的转换,以便进行后续处理。
2. 数据分块:将转换后的数据按固定长度分成若干个块,便于后续处理。
3. 迭代运算:通过多次迭代运算,结合上一步骤的处理结果,逐步生成最终的哈希值。
4. 输出结果:将最终生成的哈希值输出作为结果。
2. 哈希算法的应用哈希算法在计算机科学及信息安全领域有着广泛的应用,下面列举了几个常见的应用场景。
2.1 数据完整性校验哈希算法可以用于数据完整性校验,即通过计算数据的哈希值来判断数据是否被篡改。
具体步骤如下: - 第一步,计算数据的哈希值,并将其存储。
- 第二步,再次计算数据的哈希值,并与存储的哈希值进行比对。
- 如果两个哈希值相同,则数据完整性得到保证;否则,数据可能被篡改。
2.2 密码存储在用户密码存储方面,哈希算法通常被用于保护用户密码的安全性。
具体步骤如下: - 第一步,将用户输入的密码进行哈希算法计算,并将其存储。
- 第二步,当用户再次输入密码时,将输入的密码进行哈希算法计算,并与存储的哈希值进行比对。
- 如果两个哈希值相同,则用户输入的密码正确;否则,密码输入错误。
2.3 文件快速查找哈希算法可以用于实现文件的快速查找。
具体应用场景如下: - 通过对文件内容进行哈希算法计算,得到一个唯一的哈希值。
- 将计算得到的哈希值与文件索引进行关联绑定,加快文件的查找速度。
- 当需要查找文件时,只需要通过哈希值定位到对应的索引,而无需遍历整个文件目录。
hash脱敏算法 -回复

hash脱敏算法-回复hash脱敏算法是一种常用的数据安全技术,它通过将敏感信息转化为一串不可逆的字符串,以保护用户的私密数据。
本文将详细介绍hash脱敏算法的原理、应用场景以及常见的hash脱敏算法。
第一部分:原理hash脱敏算法的核心原理是将原始数据通过哈希函数转换成一串固定长度的字符串,且这个转换过程是不可逆的。
哈希函数是一种将不同长度的输入映射为固定长度输出的函数,且满足以下特点:1. 相同的输入总是会得到相同的输出;2. 输入数据的微小变化会导致输出结果的显著变化;3. 不同的输入极少会得到相同的输出。
常见的哈希函数有MD5、SHA-1、SHA-256等。
在数据脱敏过程中,一般会选择合适的哈希函数进行转换。
第二部分:应用场景hash脱敏算法被广泛应用于保护用户的敏感数据,其中包括但不限于以下场景:1. 用户密码保护:用户的密码往往是存储在数据库中的哈希值,而不是明文密码。
这样即使数据库泄露,黑客也很难还原出用户的真实密码。
2. 用户身份认证:在用户登录系统时,系统会将用户输入的密码进行哈希运算,然后与数据库中存储的哈希值进行比对,从而判断密码是否正确。
3. 数字签名:数字签名用于验证数据的完整性和真实性。
发送方可以使用哈希函数生成一个摘要,然后使用私钥对摘要进行加密得到数字签名,接收方可以使用公钥验证签名的有效性。
4. 数据库敏感信息保护:在数据库中存储用户的敏感信息时,可以选择对其进行hash转换,以免敏感信息泄漏。
第三部分:常见的hash脱敏算法下面介绍几种常见的hash脱敏算法:1. MD5(Message Digest Algorithm 5):是一种常用的哈希函数,其输出为128位的长度。
由于其计算速度快,广泛应用于密码验证等场景。
然而,由于其输出空间有限,存在碰撞概率较大的安全问题。
2. SHA-1(Secure Hash Algorithm 1):SHA-1是一种较为安全的哈希算法,其输出为160位的长度。
Hash算法实验原理及哈希函数简介

任务一 MD5算法111111*********一.哈希函数简介信息安全的核心技术是应用密码技术。
密码技术的应用远不止局限于提供机密性服务,密码技术也提供数据完整性服务。
密码学上的散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。
Hash函数常用来构造数据的短“指纹”:消息的发送者使用所有的消息产生一个附件也就是短“指纹”,并将该短“指纹”与消息一起传输给接收者。
即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹是否改变,就能够检测数据的完整性。
这是因为一旦数据在中途被破坏,或改变,短指纹就不再正确。
散列函数是一个函数,它以一个变长的报文作为输入,并产生一个定长的散列码,有时也称为报文摘要,作为函数的输出。
散列函数最主要的作用于是用于鉴别,鉴别在网络安全中起到举足轻重的地位。
鉴别的目的有以下两个:第一,验证信息的发送者是真正的,而不是冒充的,同时发信息者也不能抵赖,此为信源识别;第二,验证信息完整性,在传递或存储过程中未被篡改,重放或延迟等。
二.哈希函数特点密码学哈希函数(cryptography hash function,简称为哈希函数)在现代密码学中起着重要的作用,主要用于对数据完整性和消息认证。
哈希函数的基本思想是对数据进行运算得到一个摘要,运算过程满足:z压缩性:任意长度的数据,算出的摘要长度都固定。
z容易计算:从原数据容易算出摘要。
z抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的摘要都有很大区别。
z弱抗碰撞:已知原数据和其摘要,想找到一个具有相同摘要的数据(即伪造数据),在计算上是困难的。
z强抗碰撞:想找到两个不同的数据,使它们具有相同的摘要,在计算上是困难的。
三.针对哈希函数的攻击与传统密码体制的攻击方式相比,对散列函数的攻击方法主要有两种:z穷举攻击:它可以用于任何类型的散列函数的攻击,最典型的方式就是所谓的“生日攻击”。
哈希函数的工作原理及应用

哈希函数的工作原理及应用1. 哈希函数是什么?哈希函数(Hash Function)是一种将任意输入数据映射到固定大小的输出值的算法。
它的主要作用是将任意长度的输入转换为固定长度的哈希值,通常是一个较短的字符串。
哈希函数是一种单向函数,即无法通过哈希值逆向推导出原始输入数据。
2. 哈希函数的工作原理哈希函数的工作原理可以简单概括为以下几个步骤:2.1. 输入处理哈希函数接收一个输入数据,并对其进行处理。
输入数据可以是任意长度的字节流,例如一段文字、文件内容等。
2.2. 算法运算哈希函数使用特定算法对输入数据进行运算,以生成一个固定长度的哈希值。
常用的哈希算法有MD5、SHA-1、SHA-256等。
2.3. 哈希值输出哈希函数将计算得到的哈希值输出,通常是一个较短的字符串。
哈希值具有以下特点:•固定长度:无论输入数据的长度如何,哈希值的长度是固定的。
•唯一性:不同的输入数据经过哈希函数计算得到的哈希值几乎是唯一的。
•高度离散性:输入数据的微小变化会导致哈希值产生较大的变化。
2.4. 校验和与冲突校验和是哈希函数的一个重要应用,用于验证数据的完整性。
通过计算输入数据的哈希值,并与预先计算好的校验和进行比较,可以判断数据是否被篡改。
然而,由于输入数据的长度可能远大于哈希值的长度,哈希函数的输出空间有限,难免会出现哈希冲突的情况,即不同的输入数据计算得到相同的哈希值。
针对哈希冲突,常见的解决方法包括拉链法、开放定址法等。
3. 哈希函数的应用哈希函数在计算机科学和密码学领域有广泛的应用,以下是一些常见的应用场景:3.1. 数据完整性校验哈希函数常用于验证数据的完整性。
发送方计算数据的哈希值,并将其附加到数据中一起发送。
接收方收到数据后,重新计算哈希值,并与发送方传递的哈希值进行比较,从而判断数据是否在传输过程中被篡改。
3.2. 数据加密哈希函数在密码学中被广泛用于数据加密。
将敏感数据通过哈希函数进行加密,可以将数据转化为一串乱码,提供一定的数据保护。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
任务一 MD5算法111111*********一.哈希函数简介信息安全的核心技术是应用密码技术。
密码技术的应用远不止局限于提供机密性服务,密码技术也提供数据完整性服务。
密码学上的散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。
Hash函数常用来构造数据的短“指纹”:消息的发送者使用所有的消息产生一个附件也就是短“指纹”,并将该短“指纹”与消息一起传输给接收者。
即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹是否改变,就能够检测数据的完整性。
这是因为一旦数据在中途被破坏,或改变,短指纹就不再正确。
散列函数是一个函数,它以一个变长的报文作为输入,并产生一个定长的散列码,有时也称为报文摘要,作为函数的输出。
散列函数最主要的作用于是用于鉴别,鉴别在网络安全中起到举足轻重的地位。
鉴别的目的有以下两个:第一,验证信息的发送者是真正的,而不是冒充的,同时发信息者也不能抵赖,此为信源识别;第二,验证信息完整性,在传递或存储过程中未被篡改,重放或延迟等。
二.哈希函数特点密码学哈希函数(cryptography hash function,简称为哈希函数)在现代密码学中起着重要的作用,主要用于对数据完整性和消息认证。
哈希函数的基本思想是对数据进行运算得到一个摘要,运算过程满足:z压缩性:任意长度的数据,算出的摘要长度都固定。
z容易计算:从原数据容易算出摘要。
z抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的摘要都有很大区别。
z弱抗碰撞:已知原数据和其摘要,想找到一个具有相同摘要的数据(即伪造数据),在计算上是困难的。
z强抗碰撞:想找到两个不同的数据,使它们具有相同的摘要,在计算上是困难的。
三.针对哈希函数的攻击与传统密码体制的攻击方式相比,对散列函数的攻击方法主要有两种:z穷举攻击:它可以用于任何类型的散列函数的攻击,最典型的方式就是所谓的“生日攻击”。
采用生日攻击的攻击者将产生许多明文消息,然后计算这些明文消息的指纹(摘要),进行比较。
z利用散列函数的代数结构:攻击其函数的弱性质。
通常的有中间相遇攻击、修正分组攻击和差分分析攻击等。
四.MD5哈希函数1990年R.L.Rivest提出哈希函数MD4。
MD4不是建立在某种密码系统和假设之上,而是一种直接构造法。
所以计算速度快,特别适合32位计算机软件实现,对于长的信息签名很实用。
MD5是MD4的改进版,它比MD4更复杂,但是设计思想相似并且也产生了128位数列。
五.MD5哈希算法流程动画演示对于任意长度的明文,MD5首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。
对于每个明文分组的摘要生成过程如下:(1)将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。
(2)申请4个32位的链接变量,记为A、B、C、D(3)子明文分组与链接变量进行第1轮运算。
(4)子明文分组与链接变量进行第2轮运算。
(5)子明文分组与链接变量进行第3轮运算。
(6)子明文分组与链接变量进行第4轮运算。
(7)链接变量与初始链接变量进行求和运算。
(8)链接变量作为下一个明文分组的输入重复进行以上操作。
(9)最后,4个链接变量里面的数据就是MD5摘要。
六.MD5分组过程对于任意长度的明文,MD5可以产生128位的摘要。
任意长度的明文首先需要添加位数,使明文总长度为448(mod512)。
在明文后添加位的方法是第一个添加位是l,其余都是0。
然后将真正明文的长度(没有添加位以前)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。
当明文长度大于2的64次方时,仅仅使用低64位比特填充,附加到最后一个分组的末尾。
经过添加处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用,,……,表示图1-4-1 MD5的分组处理方法七.MD5子明文分组和链接变量对于512位的明文分组,MD5将其再分成16份子明文分组(sub-block),每份子明文分组为32位,我们使用M[k](k= 0, 1,……15)来表示这16份子明文分组。
这里的概念要弄清楚,一个添加位后的明文可以划分为L份明文组分,而一个明文分组又可以划分为16份子明文分组。
MD5有4轮非常相似的运算,每一轮包括16个类似的步骤,每一个步骤的数据处理都是针对4个32位记录单元中数据进行的。
这4个32位记录单元称为“链接变量”,分别标记为A、B、C、D。
这4个链接变量的初始值以16进位制表示如下:A=0x01234567,B=0x 89ABCDEF.C =0x FEDCBA98,D=0x 76543210。
链接变量用于存放中间散列函数值,经过4轮运算(共64个步骤)之后,链接变量A,B,C,D中的128位即为中间散列函数值。
中间散列函数值作为下一个明文分组的输入继续使用,当所有的明文分组都处理完毕后,链接变量A,B,C,D中的128位数据就是摘要。
八.MD5第1轮运算MD5有4轮非常相似的运算,每一轮包括16个类似的步骤,当第1轮运算中的第1步骤开始处理时,A、B、C、D四个链接变量中的值先赋值到另外4个记录单元A′,B′,C′,D′中。
这4个值将保留,用于在第4轮的最后一个步骤完成之后与A,B,C,D进行异或操作。
第1轮的操作程序为FF(a,b,c,d,M[k],S,T[i])它表示的逻辑为:a←b+((F(b,c,d)+M[k]+T[i])<<<S)其中,a、b、c、d为32位的变量,M[k]表示相应的子明文分组,对于4轮共64步的MD5算法中T[i]是64个不同的固定的数值,S为循环左移的位数,F(x,y,z)是第一轮的逻辑函数,最后将结果存放在链接变量A中。
第1轮16步的固定值T[i]值如表1-4-1所示。
表1-4-1 MD5第1轮固定数TMD5规定,第一轮的16步操作如表1-4-2所示。
表1-4-2 MD5第1轮16步运算MD5算法中,第一轮的逻辑函数F(x,y,z)为F(x,y,z)= (x•y)V( •z),MD5的算法比较复杂,下面我们以第1轮的第1步和第2步为例来展示每一步的运算。
例如,子明文分组M[0] = 0x0000FFFF、M[1] = 0x00000000,第1轮的操作程序为FF(a,b,c,d,M[k],S,T[i]),它表示的逻辑为:a←b+((F(b,c,d)+M[k]+T[i])<<<S)第一轮的逻辑函数F(x,y,z)为F(x,y,z)= ( x & y )|( ~x & z ),由表1-4-2知,第1轮第1步的运算为:FF(A,B,C,D,M[0],7,0xd76aa478),注意到这里的0xd76aa478就是T[1]的值,变量a、b、c、d分别代表链接变量A、B、C、D。
首先,b、c、d要经过逻辑函数F,即:然后得到的值要与M[0]和T[1]相加得0xFEDCBA98+0x0000FFFF+0xD76AA478 = 0xD6485F0F,0xD6485F0F要循环左移7位,得到结果:0x242F87EB,0x242F87EB与b相加得:0x242F87EB + 0x89ABCDEF = 0xADDB55DA,最后,将这个结果赋值给a,第1步的计算就完成了,只有链接变量A发生了改变,这时链接标量的值为:A = 0xADDB55DAB = 0x89ABCDEFC = 0xFEDCBA98D = 0x76543210第1轮第2步的运算为FF(D,A,B,C,M[1],12,0xe8c7b756),注意到这里的0xe8c7b756就是T[2]的值,变量a、b、c、d分别代表链接变量D、A、B、C。
首先,b、c、d要经过逻辑函数F,即:然后得到的值要与M[1]和T[2]相加得0xDB8FEFCA+0x00000000+0xE8C7B756= 0xC457A720,0xD6485F0F要循环左移12位,得到结果:0x7A720C45,0x242F87EB与b相加得:0x7A720C45 + 0xADDB55DA = 0x284D621F。
最后,将这个结果赋值给a,第2步的计算就完成了,只有链接变量D发生了改变,这时链接标量的值为:A = 0xADDB55DAB = 0x89ABCDEFC = 0xFEDCBA98D = 0x284D621F经过16个步骤之后,MD5的第一轮运算就完成了,链接变量A、B、C、D将携带第1轮运算后的数值进入第二轮运算。
九.MD5后3轮运算MD5第2轮、第3轮和第4轮算运与第一轮运算相似,这里给出相应的操作程序、固定数T、每一步运算和逻辑函数。
第2轮的逻辑函数为:G( x, y, z ) = ( x & y )|( y & ~z )。
第3轮的逻辑函数为:H( x, y, z ) = x⊕y⊕z。
第4轮的逻辑函数为:I( x, y, z ) = y⊕( x & ~z )。
第2轮的操作程序为:GG(A,B,C,D,M[k],S,T[i])。
它表示的逻辑为:a←b+((G(B,C,D)+M[k]+T[i])<<<S)。
第3轮的操作程序为:HH(A,B,C,D,M[k],S,T[i])。
它表示的逻辑为:a←b+((H(B,C,D)+M[k]+T[i])<<<S)。
第4轮的操作程序为:II(A,B,C,D,M[k],S,T[i])。
它表示的逻辑为:a←b+((I(B,C,D)+M[k]+T[i])<<<S)。
后3轮的每个步骤的运算如表1-4-3所示。
表1-4-3 MD5后3轮16步运算后3轮的固定数T的值如表1-4-4所示。
表1-4-4 后3轮的固定数T十.求和运算第四轮最后一步骤的A,B,C,D输出,将分别与A′,B′,C′,D′记录单元中数值进行求和操作。
其结果将成为处理下一个512位明文分组时记录单元A,B,C,D的初始值。
当完成了最后一个明文分组运算时,A,B,C,D中的数值就是最后的散列函数值。
任务二 SHA1函数一.SHA1与MD5差异SHA1对任意长度明文的预处理和MD5的过程是一样的,也即预处理完后的明文长度是512位的整数倍,但是有一点不同,那就是SHA1的原始报文长度不能超过2的64次方,然后SHA1生成160位的报文摘要。
SHA1算法简单而且紧凑,容易在计算机上实现。
表1-4-5列出了对MD5及SHA的比较差异之处。
让我们根据各项特性,简要说明其间的不同。
表1-4-5 MD5与SHA1的比较z安全性:SHA所产生的摘要比MD5长32位。