摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入多少长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证。
如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包括MD2、MD4、MD5、SHA、SHA-1/256/384/512等。
常用的摘要算法主要有MD5和SHA1。D5的输出结果为16字节(128位),SHA1的输出结果为20字节(160位)。
MD5算法:
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
1、首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至(L-1)*512+448,即(L-1)*64+56个字节(Bytes)。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。
2、然后在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=(L-1)*512+448+64=L*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。
3、MD5中有4个32位被称作链接变量(Chaining Variable)的整数参数,它们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。 它们连接起来作为IV。
4、当设置好这四个链接变量后,HMD5开始进入算法的四轮循环运算。
5、循环的次数是信息中512位信息分组的数目,即L次循环。
SHA-1算法:
1、首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。
2、附加消息长度,与MD5第二步类似,不同的是以大端(最高有效字节/位存储于低地 址字节/位)方式来表示消息被填充前的长度。
3、对消息摘要缓冲区初始化,算法使用160比特长的缓冲区来存储中间结果和最终散列值,将缓冲区表示成5个32比特长的寄存器A、B、C、D、E,每个寄存器以大端方式存储数据,初始值为(十六进制,高位字节在前)A=67452301,B=EFCDAB89,C=98BADCFE,D=10325476,E=C3D2E1F0。
4、以分组为单位对消息进行处理,每一个分组都经过压缩函数HSHA处理;HSHA有4轮处理过程,每一轮又有20步迭代;4轮处理过程的处理结构一样,所用逻辑函数不同,分别表示为f1、f2、f3、f4;每轮的输入为当前处理的消息分组和缓冲区当前的值,输出仍存放在缓冲区中。最后第四轮的输出与第一轮输入的缓冲区值V相加,相加时将V看做5个32比特的字,每个字与第四轮输出的对应的字按模232相加,相加结果为HMD5的输出。
5、消息的所有分组均被处理完后,最后一个HSHA的输出即为产生的160位消息摘要。
相关推荐
根据给定的信息,我们需要讨论有关消息摘要算法、尤其是NIST(美国国家标准与技术研究院)选定的最新消息摘要算法的知识点,即SHA3(安全哈希算法3)标准。 首先,关于NIST和消息摘要算法,美国国家标准与技术研究...
信息摘要算法是信息安全领域中的重要概念,主要用于验证数据的完整性和一致性。MD5(Message-Digest Algorithm 5)和SHA-1(Secure Hash Algorithm 1)是两种广泛使用的摘要算法,它们可以将任意长度的数据转化为...
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
SSL/TLS协议结合了多种密码学技术,包括加密算法、消息摘要算法(哈希算法)以及数字签名等,确保了通信的安全性。 1. 加密算法: 加密算法是SSL/TLS协议的核心组成部分,分为对称加密和非对称加密两种。 - 对称...
哈希摘要算法在信息技术领域扮演着至关重要的角色,它们被广泛应用于数据完整性验证、数字签名、文件校验、密码学等多个场景。哈希函数能够将任意长度的数据转换为固定长度的输出,通常称为哈希值或摘要。这些值具有...
MD5 摘要算法的C语言实现,从 RFC1321 中摘出来的算法实现
### 信息摘要算法 在网络安全领域,信息摘要算法(Message Digest Algorithm)是一种极其重要的技术手段,主要用于确保数据的完整性和一致性。它通过将任意长度的数据输入转换为固定长度的输出,这一过程通常被称为...
包含Base64 ...包含摘要算法:MD2,MD4,MD5,SHA1,SHA2(SHA-224,SHA-256,SHA-384,SHA-512) 数字签名算法:RSA,DSA,ECDSA 详情请查看:http://blog.csdn.net/baidu_34012226/article/details/53331147
消息摘要算法在 Java Web 系统中的应用 在 Java Web 系统中,消息摘要算法是一种非常重要的安全技术,主要用于保护用户的敏感信息,如密码、用户名等。随着 Java Web 的广泛应用,系统中的信息安全性也变得越来越...
文档摘要算法的研究与应用 文档摘要算法是信息技术发展的产物,以解决信息过载的问题。该算法可以自动或半自动地提取文档中的关键信息,并将其按照一定的逻辑结构进行整合,形成简明扼要、连贯一致的文本。文档摘要...
通过C语言实现国密SM3算法,可实现对内容的摘要计算
在C++中实现MD5算法,通常涉及以下几个关键步骤: 1. **初始化**: 开始计算MD5时,会用到四个32位的中间变量A、B、C和D,以及一个64项的缓冲区。这些变量和缓冲区用于存储计算过程中的中间结果。 2. **处理消息块*...
### MD5摘要算法详解:Java实现 #### 一、引言 MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,能够将任意长度的信息转化为一个固定长度(通常为128位)的散列值或摘要。这个摘要通常被用来验证...
从 RFC3174 文档摘抄下来的 SHA1 摘要算法的C语言实现代码
提出了基于LDA(latent Dirichlet allocation)重要主题的多文档自动摘要算法。该算法与已有的基于主题模型的多文档自动摘要算法主要有两点区别:第一,在计算句子主题与文档主题相似度问题上,引入并定义了主题重要...
按照国密SM3算法实现手册,VC++ MFC编译实现的摘要工具。欢迎大家试用
消息摘要算法是信息安全领域中用于验证数据完整性的关键技术,它们可以将任意长度的输入(也称为预映射或消息)转换为固定长度的输出,通常称为摘要或哈希值。这个过程是不可逆的,即无法从摘要恢复原始数据。在给定...
在接收到数据和数字签名后,接收者会使用相同的摘要算法对数据计算摘要,然后使用发送者的公钥解密接收到的签名,得到另一个摘要。如果这两个摘要相匹配,那么可以确定数据是完整且来自可信的发送者。 编程实现:在...
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特...