失效链接处理 |
MD5算法(实现磁盘管理) PDF 下载
本站整理下载:
提取码:jmj4
相关截图:
主要内容:
磁盘文件管理工具
本项目旨在实现一个文件管理工具,主要功能是删除磁盘中的重复文件。如果判断两个文件是否完全一致,我们采用
计算文件指纹的方法,通过指纹验证的方法判断两个文件是否相同。所谓的文件指纹即数字签名。
常用的计算机签名方法
数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送
信息真实性的一个有效证明。 是一种类似写在纸上的普通的物理签名 ,比如合同签名。
数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字
签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字摘要的值也将发生
变化。不同的文件将得到不同的数字摘要。
常用的数字签名方法主要有:HASH算法 ,此算法主要包括MD(Message-Digest,信息摘要)和SHA(安全散列算
法,Secure Hash Algorithm)两类 。Digital Signature Algorithm (DSA), ECDSA (Elliptic Curve Digital Signature
Algorithm),椭圆曲线数字签名算法,微软产品的序列号验证算法使用的就是ECDSA。与传统的数字签名算法相比,
速度快,强度高,签名短。
计算机签名MD5
1. what's MD5
MD5是由Ron Rivest在1991设计的一种信息摘要(message-digest )算法,当给定任意长度的信息,MD5会产生一个
固定的128位“指纹”或者叫信息摘要。从理论的角度,所有的信息产生的MD5值都不同,也无法通过给定的MD5值产
生任何信息,即不可逆。
MD5算法在RFC 1321(Request For Comments,征求修正意见书)做了详细描述。
1.1 MD5功能特点
1.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹)
2.不同的输入得到的不同的结果(唯一性)。要使两个不同的信息产生相同的摘要,操作数量级在2^64次方。
3.根据128位的输出结果不可能反推出输入的信息。根据给定的摘要反推原始信息,它的操作数量级在2^128次。
1.2 MD5争议
MD5是否为加密算法:
<1>:MD5不能从密文反过来得到原文,即没有解密算法,故不能称为加密算法;
<2>:MD5处理后看不到原文,即已经将原文加密,故MD5属于加密算法。
1.3 MD5用途
1>防止信息被篡改
a) 电邮文档一致性验证:在发送一个电子文档前,先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得
到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。
b)文件下载安全验证:在下载网络文件/程序时,为了防止不法分子在安装程序中添加木马,一般会在网站上公布由
安装文件得到的MD5输出结果。用户下载完之后,在本地计算MD5值,在于网站公布的MD5值作比较,验证文件是
否完整和安全。
c)SVN update:SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.
2>防止直接看到密码明文:现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。就算不法分
子得到数据库种用户密码的MD5值,也无法知道用户的密码。比如在UNIX系统中用户的密码就是以MD5(或其它类
似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保
存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的
明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而
且还在一定程度上增加了密码被破解的难度。
3>防止抵赖(数字签名):这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘
要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘
要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。
2. MD5算法步骤
MD5的算法输入为以bit为单位的信息(1 byte = 8 * bit),经过处理,得到一个128bit的摘要信息。这128位的摘要信
息在计算过程中分成4个32bit的子信息,存储在4个buffer(A,B,C,D)中,它们初始化为固定常量。MD5算法然后
使用每一个512bit的数据块去改变A,B,C,D中值,所有的数据处理完之后,把最终的A,B,C,D值拼接在一
起,组成128bit的输出。处理每一块数据有四个类似的过程,每一个过程由16个相似的操作流组成,操作流中包括非
线性函数,相加以及循环左移。MD5算法大致可分为5个步骤:
添加填充位
添加bit长度
初始化MD buffer(A,B,C,D) 按512位数据逐块处理输入信息
摘要输出
2.1 添加填充位
信息的最尾部(不是每一块的尾部)要进行填充,使其最终的长度length(以bit为单位)满足length % 512 = 448,这一步
始终要执行,即使信息的原始长度恰好符合上述要求。
填充规则:第一个bit填充位填 '1' ,后续bit填充位都填 '0' ,最终使消息的总体长度满足上述要求。总之,至少要填
充 1 bit,至多填充 512 bit。
2.2 添加bit长度
在2.1之后,添加一个64bit大小的length,length表示原始消息(未填充之前)的bit长度,极端情况,如果消息长度超
过2^64,那么只使用前2^64bit消息。
这一步完成之后,消息的最终长度变为(length + 64) % 512 = 0,即length为512的整数倍。从这里再去看第一步,至
少需要填充 8 bit,为什么?我们假设几种情况分析一下:
首先要明确一个字符占1byte(8bit, 中文字符的话占16bit),所以原始信息bit长度一定是8的倍数。
假设1:消息原始长度 % 512 = 448
这时候原始长度符合要求,但是根据填充规则,仍然要至少填1bit的 '1',后面还剩63bit,不够添加长度,所以需要
再加一块数据(512bit),这样后面63bit填0,新加的数据前448bit填0,最后64bit填数据原始长度,一定要记住长度
值是放在最后一块数据的最后64bit。
|