文档库 最新最全的文档下载
当前位置:文档库 › 基于MD5的文件完整性检测软件设计_郑光明

基于MD5的文件完整性检测软件设计_郑光明

基于MD5的文件完整性检测软件设计_郑光明
基于MD5的文件完整性检测软件设计_郑光明

第20卷第1期湖南理工学院学报(自然科学版)Vol.20 No.1 2007年3月 Journal of Hunan Institute of Science and Technology (Natural Sciences) Mar.2007

基于MD5的文件完整性检测软件设计

郑光明,胡 博

(湖南理工学院计算机系,湖南岳阳 414006)

摘 要:防范网络攻击最常用的方法就是使用防火墙,但是仅仅使用防火墙来保护内部网络安全是不够的。论文研究并设计了一个文件完整性检测软件,可以弥补防火墙保护内部网络安全的不足。它采用MD5算法,对某些敏感文件进行多次测,若当前检测的信息摘要值与上次不同,则说明该文件已被修改。在入侵者进入系统后,而让系统文件并不改动是非常困难的,因而该软件能检测系统可能受到的攻击。

关键词:文件完整性;MD5;网络安全;入侵检测

中图分类号:TP391 文献标识码:A 文章编号:1672-5298(2007)01-0035-04

The design of file integrity checking system based on MD5

ZHENG Guang-ming, HU Bo

( Dept. of Computer, Hunan Institute of Science and Technology, Yueyang 414006, China )

Abstract:Firewall is usually used to protect network against attacks, but it is not powerful enough to protect intranet. A file integrity checking system was proposed which based on MD5, it can make up the shortage of firewall. The same message digest can be got from checking the same file in different times if file was not changed. So the system can find attacks by the difference of the digest of the sensitive files.

Key words:file integrity; MD5; network security; invasion detection

随着计算机技术的迅速发展,由计算机处理的事务从单机系统向网络迁移。网络技术的普及,攻击工具和技术的公开,也给一些人创造了破坏网络的可能,黑客攻击的案例已经屡见不鲜,但是在国内,网络安全还未得到足够的重视。防范网络攻击最常用的方法就是利用防火墙技术,经过仔细的配置,通常能够在内外网之间提供安全的网络保护屏障,降低内部网络受攻击的风险。但是,仅仅使用防火墙来保护内部网络安全是远远不够的。首先,入侵者可以寻找防火墙背后可能敞开的后门。其次,防火墙完全不能阻止内部袭击,对于来自内部局域网的攻击,防火墙形同虚设。第三,由于性能的限制,防火墙通常只能实现粗粒度的过滤,无法提供实时的入侵检测能力。文件完整性检测系统是近年出现的新型网络安全技术,它可以弥补防火墙的不足,为网络安全提供实时的入侵检测及采取相应的防护手段。

1 文件完整性检测简介

系统的安全是一个体系,它建立在各种安全机制集成的基础上。入侵检测系统作为系统安全的一道重要防线,主要是通过多种手段监控系统来发现入侵。文件完整性检测是通过检测系统关键文件的变化情况来为入侵的发现提供依据。

1.1 文件完整性检测的引入

一旦入侵者成功侵入系统后,为逃避检测和方便下次进入,首要的事就是更换系统文件,代之以后门程序。因此,发现入侵行为很重要的一个方面就是保证数据和系统文件的完整性。一般对文件完整性的保护采用32位CRC校验(循环冗余校验)。然而,高级入侵者已经可以使用特殊技术骗过CRC校验。因而我们需要采用更多更安全的方法来检测。

收稿日期:2006-10-08

作者简介:郑光明(1973-),男,讲师,硕士,主要研究方向:数据库系统与信息安全。

36 湖南理工学院学报(自然科学版)第20卷

1.2 文件完整性检测的基本思想

文件完整性检测的根本思想就是:将被入侵的系统的状态和未被入侵的系统的状态相比较。在建立了正确安全的初始系统状态后,检测程序定期醒来,根据初始系统状态检测当前系统状态,发现可疑或非法的变动,触发警报和通知系统管理员。另外,正确的系统状态也被经常更新。由此,要实现一个完全的检测功能,至少需要以下几部分:正确安全的系统状态、预先定义的被检测项目和一个进行定期检测的程序。

1.3 文件完整性检测的内容

具体对文件检测时,要考察哪些内容呢?这是涉及到检测有效性的核心问题。不同的操作系统,关键的文件也不一样,抽取系统的关键文件采用密码学的方法来检验文件的完整性。在Unix系统中,仅用sum和cksum这两个命令来检验完整性是远远不够的,因为它们是用来检验偶然的修改,不足以阻止入侵者恶意产生特定的校验和行为。由于常用的MD5算法的单向性,入侵者很难逆推,也极难找到两个随机信息使其产生相同的摘要,从而使产生的摘要具有高度安全性,它适合于安全快速的产生摘要。

2 文件完整性检测原理

目前流行的入侵检测方式是滥用检测和异常检测相结合的方式。滥用检测只能检测己知的入侵模型并且依赖于审计数据的完整性,因此存在入侵漏报的情况;异常检测系统是基于入侵是异常行为的子集这一前提,并非所有的入侵行为都是异常的并且并非所有异常行为都是入侵,因此异常检测中常常存在漏报和误报。但这两种检测方式结合的技术依然不能满足准确无误地检测入侵行为的需求。通常入侵者入侵时都会对一些文件进行改动,那么采用对文件进行完整性检验就会检测出对文件的更改,从而可判定入侵。因此本文提出了基于完整性检验的入侵检测技术。

2.1 完整性检测的相关问题

大部分计算机系统的核心是文件系统。文件系统包含用户数据、可执行程序,配置和认证信息和操作系统本身。检测文件系统的非授权改变和不可预料的改变给系统管理员保护他们的系统提供了宝贵的数据。文件系统是比较普遍的被攻击的目标,入侵者通常修改系统配置和程序以便于下次进入系统。通常修改系统日志来掩盖他们的入侵路径和阻碍入侵的发现。用户文件的修改和破坏将会损坏安全策略,并导致服务的降级和拒绝。因此,安全管理员需要紧密地检测文件内容的完整性。在设计中有几个关键问题需要考虑: 检验方式的选定、被检测的文件的选择、备份数据的存放及安全问题、主机与备份主机的认证及安全通信问题、用于检验的基准数据库的存放及安全问题。

2.2 MD5算法

MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。

Message-Digest泛指信息流(Message)的Hash变换,就是把一个任意长度的信息流变换成一定长的大整数。MD5将任意长度的信息流变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法。换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。

由于MD5算法的散列值计算的快速性和很高的安全强度,使它成为目前比较流行的散列算法。MD5算法以任意长度的信息作为输入,其处理操作包括以下几个步骤:

1)加填充位。对输入信息进行填充使信息的长度(比特数)448模512同余(长度=448mod512),填充的最

第1期郑光明,胡博:基于MD5的文件完整性检测软件设计37

高位为1,其余位为0。

2)附加长度值。将用64位表示的初始信息(填充前)的位长度附加在步骤I的结果后(低位字节优先)。如果初始长度大于64,仅使用该长度的低64位。这样,该域所包含的长度值为初始信息长度模64的值。这两步的结果将产生一个长度为512整数倍比特的信息。经扩展的信息表示成512bit的分组序列Y0,Y1,YL-1,扩展信息的长度等于512*L。

3)初始化MD5的缓存。使用一个128bit的缓存来存放该散列算法的中间及最终结果。该缓存表示为4个32bit的寄存器(A,B,C,D),这些寄存器被初始化为如下32bit长的整数:A=67452301;B=EFCDAB84;C=48BADCFE;D=10325476。这些值以小数在前的格式存储,即字的低位字节放在低地址字节上。

4)处理512bit(16个字)信息分组序列。算法的核心是包含4个“循环”的压缩函数。4个循环有相似的结构,但每次循环使用不同的原始逻辑函数,在说明中分别表示为F、G、H和I。每一循环都以当前的I在处理的512bit分组(Yq)和128bit的缓存值ABCD为输入,然后更新缓存的内容。每个循环还使用一个64元素表T[0..64]的四分之一,该表通过正弦函数构建。T的第i个元素(表示为T[i])的值等于232*abs(sin(i))的整数部分值,其中i的单位是弧度。因为(abs(sin(i))是0到1之间的数,因此每个T的元素值均能用32bit表示。这个表提供了一个“随机化”的32bit模式集,它将消除输入数据的任何规律性。第四次循环的输出加到第一次循环的输入(CVq)上产生CVq+l。

5)输出。所有L个512bit的分组处理完成后,第L阶段产生的输出便是128bit的散列值。

2.3 基于文件完整性检测的检测能力

对于攻击者采用何种漏洞的攻击方式,对基于文件完整性检验的检测技术来说是透明的,它只在一个重要的前提下才能够发挥作用,那就是入侵者在入侵时会对文件做一些非法的修改。这时基于文件完整性检验的检测技术才有用武之地。通常的攻击步骤是先扫描,然后侵入,最后建立Trojan(后门),以便下次进入,并且擦掉痕迹。对于这种通常的攻击,由于入侵程序建立了Trojan,则必然修改了系统的配置文件,则只要该配置文件在基于文件完整性检验的配置文件的配置项所指定的要检验的文件中,那么就能够检测到入侵的发生;否则无法检测到入侵的发生。对于著名的Mitnick攻击来说,它成功入侵后会对/shost进行非法修改;对于特洛伊木马来说,成功入侵后,它用别的文件替换已有的文件;对于Linsniffer 来说,它成功侵入后修改了/etc/passwd文件,添加新的用户。这时基于文件完整性检验的检测技术将能非常准确地检测出入侵的发生。通常入侵痕迹是记录在日志文件中,日志文件并不在检验的范围内,所以基于文件完整性检验的检测技术无法根据入侵痕迹检测到入侵的发生。对于利用网络协议的脆弱性对网络服务质量的攻击,基于文件完整性检验的检测技术很难发挥作用,因为这种攻击没有对文件系统造成非法修改。例如SYN淹没攻击,攻击者根本不想完成3次握手过程建立起正常的连接,它的目的只是等待建立每一特定服务的连接数量超过系统的限制数量,使被攻击的系统无法建立关于该服务的新连接。类似的还有ICMP攻击、Teardrop、Land和IP分段攻击等。另外基于文件完整性检验的检测技术并不具备堆入侵行为检测的实时性,它检测一遍的时间取决于被检测的文件系统的空间大小,时间和文件系统的大小成正比。通常这三种检测技术结合使用,在功能上互补,增强了检测能力。基于文件完整性检验的检测结果还为文件系统的恢复提供重要的依据。因此研究文件完整性检验的技术对于入侵检测和文件系统的恢复有重要的意义。

2.4 文件完整性检测系统的优点

从数学上分析,攻克文件完整性检测系统,无论是时间上还是空间上都是不可能的。实际上,文件完整性检测系统是一个检测系统被非法使用的最重要的工具之一。文件完整性检测系统具有相当的灵活性,可以配置成为监测系统中所有文件或某些重要文件。当一个入侵者攻击系统时,他会干两件事,首先,他要掩盖他的踪迹,即他要通过更改系统中的可执行文件、库文件或日志文件来隐藏他的活动;其次,他要作一些改动保证下次能够继续入侵。这两种活动都能够被文件完整性检测系统检测出。

3 文件完整性检测软件设计

根据软件工程中软件设计步骤要求,并结合实际,完成对文件完整性软件的设计与实现。根据文件完整性检测的基本思想,确定软件程序的组织结构,划分程序的功能模块;根据文件完整性检测的基本内容以及几种加密算法的比较确定程序的核心算法,编写各模块实现方法,从而简单实现文件完整性检测软件的各项功能。

3.1软件的功能设计要求

文件完整性软件的功能设计要求为:建立了正确安全的初始系统状态;检测程序手动或者定期醒来,根据初始系统状态检测当前系统状态;发现可疑或非法的变动,程序立即通知管理员;软件生成日志记录文件完整性检测情况。

3.2程序的组织结构

根据软件设计目的和要求,规划程序的组织结构如下图1所示:

3.3程序中各功能模块设计

3.3.1文件加密功能模块

本模块主要实现的是对任何文件进行MD5加密,

将任意长度的“字节串”变换成一个128bit 的大整数。

在软件运行之初,加密得到的是文件初始状态的信息

摘要值,本次加密在添加文件过程中完成;在程序运

行以后,再由手动检测或者自动检测模块调用,对已

经加密的文件再次进行MD5加密,并取得其当前状态

的信息摘要值。文件进行加密以后取得的信息摘要值

将以文件的形式保存在程序运行目录下的“MD5”命名

的文件夹中,信息摘要文件以该源文件的文件名作为

文件名,md5为文件扩展名。

3.3.2批处理文件监控模块

此模块主要实现的是将需要进行完整性检测的文件路径添加到检测程序中去,程序根据已经添加的路径对文件批量加密。在添加文件路径的过程中调用文件加密功能模块对文件进行初始状态的加密。删除文件主要是将已添加到程序的所选路径删除。当文件的路径被删除以后,文件完整性检测程序将不再对该文件进行完整性检测。

3.3.3手动检测功能模块

在模块中主要实现的是用户手动将已经将路径添加到程序的文件再次调用文件加密功能模块进行再次加密。比较两次加密得到的信息摘要值,如果这两个值相同,则文件的完整性完好,否则文件的完整性在初始加密以后被破坏。文件的完整性与否将显示在程序运行界面中。

3.3.4自动检测功能模块

主要实现的是系统根据用户设定的检测间隔时间将已经将路径添加到程序的文件再次调用文件加密功能模块进行再次加密。比较两次加密得到的信息摘要值,如果这两个值相同,则文件的完整性完好,否则文件的完整性在初始加密以后被破坏。文件的完整性与否将显示在程序运行界面中。本功能模块中,包括自动生成检测日志功能。

3.3.5日志功能模块

日志功能模块主要实现的是记录一段时间内已经进行文件完整性检测的文件名,文件路径以及完整性状态等。文件完整性手动检测时候,日志文件也由用户手动生成。文件完整性手动检测时候,日志文件自动检测时候生成。程序运行日志保存在程序运行目录下以“检测报告”命名的文件夹(下转第64页) 文件完整性检测软件系统 批处理文件监控模块 文件完整性手动检测模块文件初始状态加密模块文件完整性自动检测模块软件运行日志模块

图1 程序组织结构图

P Q 对1C 、2C 的无源灵敏度为0。

3 电路仿真

为了验证设计滤波器电路的正确性,作者用PSPICE 对该电路进行了电路仿真。当1231R R R k ===Ω,120.01C C uF ==,由公式(10)得:15.9P f kHz =,在PSPICE9.1下,对

图2所示电路用PSPICE 进行仿真,得到幅频特性(如图3所示)与要求

的技术参数相吻合。

4 结 论

本文提出了仅仅用一个电流传送器(CCII+)、两个电容和三个电阻

实现二阶低通、带通电流模式滤波器电路,对该电路进行了电路分析,

得到了电流传输函数。并用PSPICE 对该滤波器电路进行了仿真,仿真

结果表明,该滤波器电路设计正确,理论分析与仿真结果相吻合。电路

具有如下特点:

(1) 能实现二阶电流模式滤波函数;

(2) 电路结构简单;

(3) 具有的元器件较少;

(4) 无源灵敏度较小;

(5) p ω,P Q 可调;

(6) 电路易于集成。

参考文献:

[1] 马云辉. 第二代电流传输器组成的RC 正弦振荡器[J]. 湘潭大学学报.1995.17(4):35~37.

[2] 张 涛, 赵述江. 电流模式CCII 正弦波振荡器的实现[J]. 武汉科技大学学报.2000.23(3):284~285.

[3] 江金光, 陈洪云, 何怡刚, 吴 杰. 一种新的单CCII- 实现二阶电流模式滤波器[J]. 湖南大学学报,2000,27(6):61~64.

[4] 彭良玉, 黄满池. 采用CCII+实现电流模式二阶滤波器[J]. 湖南教育学院学报,1999.17(5):142~146.

(上接第38页)中,日志以文本文档形式保存,以检测时间作为日志文件的文件名。 4 结束语

基于MD5的文件完整性检测软件在Windows 平台下用C++进行了实现。在对Windows 系统的一些敏感的文件检测过程中,效果良好,只要是对被监控的文件的攻击都能检测到。

参考文献:

[1] 裴庆祺. 模糊入侵检测技术研究[D].西安电子科技大学硕士学位论文,2004,1.

[2] 刘 淳,汪为农.系统安全检测的研究与应用.计算机工程[J]1999,25(8):42-44.

[3] 王 倩,陆 最,龚俭.一种基于规则的安全日志范式分析模型.计算机工程[J].1999, 25:53-58.

[4] 梁启明. 基于SSL 的网络安全应用的研究[D]. 清华大学硕士学位论文,1999,5.

[5] 胡建伟. 网络安全与保密[M]. 西安:西安电子科技大学出版社,2003,11.

[6] 胡 炎,董名垂. 用数字签名解决电力系统敏感文档签名问题. 电力系统自动化[J],2002,07:12-17.

[7] 彭 岚,廖仁全. 电子商务安全中的数字签名技术. 中国金融电脑[J],2004,01:13.

[8] Johan Atreya. 数字签名[M]. 贺军. 北京:清华大学出版社,2003,1.

[9] 王东滨. 基于文件完整性检验的分布式入侵检测及恢复系统[D]. 哈尔滨工业大学硕士学位论文. 2002,7:29-36.

图3 对图2电路的仿真

MD5加密算法-c源代码

md5加密算法c实现 七分注释收藏 经常到csdn来是查资料,每次都会有所收获。总是看别人的感觉很不好意思,于是决定自己也写一点东西贡献出来。于是就有了这篇md5七分注释。希望对用到的朋友有所帮助。 记得当初自己刚开始学习md5的时候,从网上搜了很多关于算法的原理和文字性的描述的东西,但是看了很久一直没有搞懂,搜c的源代码又很少。直到后来学习rsa算法的时候,从网上下了1991年的欧洲的什么组织写的关于rsa、des、md5算法的c源代码(各部分代码混在一块的,比如rsa用到的随机大素数就是用机器的随机时间的md5哈希值获得的)。我才彻底把md5弄明白了。这里的代码就是我从那里面分离出来的,代码的效率和可重用性都是很高的。整理了一下希望对需要的朋友能够有帮助。 md5的介绍的文章网上很多,关于md5的来历,用途什么的这里就不再介绍了。这里主要介绍代码。代码明白了就什么都明白了。 //////////////////////////////////////////////////////////////////// /* md5.h */ #ifndef _MD5_H_ #define _MD5_H_ #define R_memset(x, y, z) memset(x, y, z) #define R_memcpy(x, y, z) memcpy(x, y, z) #define R_memcmp(x, y, z) memcmp(x, y, z) typedef unsigned long UINT4; typedef unsigned char *POINTER; /* MD5 context. */ typedef struct { /* state (ABCD) */ /*四个32bits数,用于存放最终计算得到的消息摘要。当消息长度〉512bits时,也用于存放每个512bits的中间结果*/ UINT4 state[4]; /* number of bits, modulo 2^64 (lsb first) */ /*存储原始信息的bits数长度,不包括填充的bits,最长为2^64 bits,因为2^64是一个64位数的最大值*/ UINT4 count[2]; /* input buffer */ /*存放输入的信息的缓冲区,512bits*/ unsigned char buffer[64];

MD5算法及源代码

MD5算法及源代码 分类:计算机密码 //获得MD5的二个数组和一个buffer并初始化 MD5 *GetMD5(); //初始化MD5的二个数据和一个buffer void MD5Init (MD5 *context); //用于计算MD5值的函数 void MD5Update (MD5 *context, unsigned char *input, unsigned int inputLen); //输出结果 void MD5Final (MD5 *context, unsigned char digest[16]); //对input数据做一次完整的MD5运算 void MD5Out (MD5 *md5, unsigned char *input, unsigned int inputLen, unsigned char out[16]); //计算一个文件的MD5值 int 计算一个文件的MD5值(TCHAR* 文件路径, unsigned char md5值[16]) { MD5 context; int 缓冲区长度 = 1024, 读取到的字节数; unsigned char *缓冲区 = new unsigned char[缓冲区长度]; FILE *文件指针 = fopen(文件路径, "rb"); if(文件指针 == NULL) return 1; MD5Init(&context); while ( (读取到的字节数 = fread ( 缓冲区, 1, 缓冲区长度, 文件指针 )) ! =EOF) { MD5Update (&context, 缓冲区, 读取到的字节数); //判断是否为已经读到文件尾 if ( 读取到的字节数 < 缓冲区长度 ) break; } MD5Final (&context, md5值); free ( 缓冲区 ); return 0; } /** **MD5.h **/ typedef struct { unsigned long state[4]; /* state (ABCD) */ unsigned long count[2]; /* number of bits, modulo 2^64 */

MD5算法的设计与实现

实验三 MD5算法的设计与实现 一、实验目的: 设计并实现MD5算法,从而进一步加深对数据完整性保证和散列函数的理解。 二、实验要求: 1、产生任意电子文档(包括文本和二进制)的128位信息摘要。 2、根据信息摘要验证该电子文档是否被更改过。 三、实验内容: 1、MD5算法简介: Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。1991年,Rivest开发出技术上更为趋近成熟的md5算法。它在MD4的基础上增加了"安全-带子"(safety-belts)的概念。虽然MD5比MD4复杂度大一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息-摘要的大小和填充的必要条件与MD4完全相同。Den boer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

2. MD5算法逻辑处理操作包括以下几步: 步骤一:附加填充比特。对报文填充使报文的长度(比特数)与448模512同余。即填充比特使长度为512的整数倍减去64。例如,如果报文是448比特长,那么将填充512比特形成960比特的报文。填充比特串的最高位为1,其余各位均为0。 步骤二:附加长度值。将用64比特表示的初始报文(填充前)的位长度附加在步骤一的结果后(低位字节优先)。如果初始长度大于264,仅使用该长度的低64比特。这样,该域所包含的长度值为初始报文长度模264的值。这两步的结果将产生一个长度为512整数倍比特的报文。经扩展的报文表示成512比特的分组序列列Y1、Y2、Y3……Y(n-1),因此扩展的报文长度等于L乘512比特。与之等价的是,该结果也等于字长为16比特或32比特的整数倍,如果让[]10?NML表示扩展报文包含的字数,其中N是16的倍数,则N等于L 乘512。下图为使用MD5产生报文摘要的过程:

CTD验证标准

eCTD验证标准 2019年9月

序号描述说明 严重程度1.1文件数量统计显示当前序列中包含的所有文件的数量。提示信息1.2文件大小统计 显示当前序列所有文件的总容量大小。 提示信息2.1文件夹不能为空 序列文件夹目录结构中不允许存在空文件夹(文件夹没有文件或子文件夹)。错误2.2不能超出文件大小限制超出允许大小的文件会提示警告信息。 普通单个文件最大允许500MB,单个SAS XPT文件可支持4GB。 警告2.3不允许未被引用的文件文件夹目录下的所有文件必须在骨架文件(index.xml或cn-regional.xml)中被有所引用,否则提示错误信息。 错误 2.4文件类型(文件扩展名检查) 所有被引用文件必须有且仅有一个文件扩展名,文件扩展名必须在eCTD技术规范规定的可接受的文件类型列表内。 错误2.5文件和文件夹命名规范必须正确文件和文件夹的命名规则必须符合eCTD技术规范第3.3.2章节的规定。错误2.6m1文件夹存在但是不存放单个文件 m1文件夹必须存在并且必须仅包含子文件夹而不是单个文件。错误2.7 util文件夹必须存在且包含的文件必须正确 util文件夹必须存在 并检查该文件夹中的下列文件: - ich-ectd-3-2.dtd (checksum必须符合ICH发布的值)- cn-regional.xsd (checksum必须符合NMPA发布的值)- xml.xsd (checksum必须符合NMPA发布的值)- xlink.xsd (checksum必须符合NMPA发布的值) - ich-stf-v2-2.dtd (checksum必须符合ICH发布的值)- ectd-2-0.xsl (checksum必须符合ICH发布的值) - cn-regional.xsl (checksum必须符合NMPA发布的值) - ich-stf-stylesheet-2-3.xsl (checksum必须符合ICH发布的值)- ich-stf-stylesheet-2-2a.xsl (checksum必须符合ICH发布的值) 请注意,只有在当前序列使用到STF时才需要检查ich-stf-v2.2.dtd和stf样式表。另外,在STF中,ich-stf-stylesheet-2-3.xsl和ich-stf-stylesheet-2-2a.xsl样式表均可以被引用,此项验证标准仅检查在STF中被引用到的样式表是否在util\style文件夹中存在以及其checksum是否符合规范。 错误 2.8序列号根文件夹不允许其他文件根文件夹(申请序列文件夹)除技术规范明确允许的文件外,不能有其他文件。错误2.9序号文件夹要求序列文件夹名称必须仅包含4个数字。错误 eCTD验证标准 1 - 基础识别 2 - 文件/文件夹

MD5加密算法原理

MD5加密算法原理 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述 (https://www.wendangku.net/doc/5917126232.html,/rfc/rfc1321.txt),这是一份最权威的文档,由Ronald L. Rivest 在1992年8月向IEFT提交。. . Van Oorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(Brute-Force Hash Function),而且他们猜测一个被设计专门用来搜索MD5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代MD5算法的MD6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响MD5的安全性。上面所有这些都不足以成为MD5 的在实际应用中的问题。并且,由于MD5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,MD5也不失为一种非常优秀的中间技术),MD5怎么都应该算得上是非常安全的了。 算法的应用 MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如: MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461 这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的"抵赖",这就是所谓的数字签名应用。 MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

常见校验算法

常见校验算法 一、校验算法 奇偶校验 MD5校验 求校验和 BCC(Block Check Character/信息组校验码),好像也是常说的异或校验方法 CRC(Cyclic Redundancy Check/循环冗余校验) LRC(Longitudinal Redundancy Check/纵向冗余校验) 二、奇偶校验 内存中最小的单位是比特,也称为“位”,位有只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte)。不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相应数据发生变化,进而导致应用程序发生错误。而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位。在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标示为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数,那么在校验位定义为1,反之为0。当CPU读取存储的数据时,它会再次把前8位中存储的数据相加,计算结果是否与校验位相一致。从而一定程度上能检测出内存错误,奇偶校验只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误 三、MD5校验 MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc 发明,由MD2/MD3/MD4 发展而来的。MD5的实际应用是对一段Message(字节串)产生fingerprint(指纹),可以防止被“篡改”。举个例子,天天安全网提供下载的MD5校验值软件WinMD5.zip,其MD5值是1e07ab3591d25583eff5129293dc98d2,但你下载该软件后计算MD5 发现其值却是81395f50b94bb4891a4ce4ffb6ccf64b,那说明该ZIP已经被他人修改过,那还用不用该软件那你可自己琢磨着看啦。 四、求校验和 求校验和其实是一种或运算。如下: //-------------------------------------------------------------------------------------------------- //如下是计算校验位函数 // checkdata,包括起始位在内的前九位数据的校验和 //-------------------------------------------------------------------------------------------------- unsigned char CLU_checkdata(void) { //求校验和 unsigned char checkdata=0; for(point=0;point<9,TI=1;point++) { checkdata=checkdata | buffer[point]; } return(checkdata); } 四、BCC(Block Check Character/信息组校验符号)

md5计算程序源代码

//以下为md5计算程序源代码,可以复制到自己的程序中使用,使用方法见最后的main函数 //经测试,绝对可以使用 ////////////////////////////////////////////////////// #include #include #include using namespace std; /* Type define */ typedef unsigned char byte; typedef unsigned int uint32; using std::string; using std::ifstream; /* MD5 declaration. */ class MD5 { public: MD5(); MD5(const void* input, size_t length); MD5(const string& str); MD5(ifstream& in); void update(const void* input, size_t length); void update(const string& str); void update(ifstream& in); const byte* digest(); string toString(); void reset(); private: void update(const byte* input, size_t length); void final(); void transform(const byte block[64]); void encode(const uint32* input, byte* output, size_t length); void decode(const byte* input, uint32* output, size_t length); string bytesToHexString(const byte* input, size_t length); /* class uncopyable */ MD5(const MD5&); MD5& operator=(const MD5&);

配置OSPF身份验证和MD5验证

步骤 1. 将R1 配置为使用OSPF 简单身份验证。 要在R1 上启用简单身份验证,请在全局配置提示符下使用router ospf 1 命令进入路由器配置模式。然后发出area 0 authentication 命令以启用身份验证。 R1(config)#router ospf 1 R1(config-router)#area 0 authentication 00:02:30: %OSPF-5-ADJCHG: Process 1, Nbr 10.2.2.1 on Serial0/0/0 from FULL to DOWN, Neighbor Down: Dead timer expired 00:02:30: %OSPF-5-ADJCHG: Process 1, Nbr 10.2.2.1 on Serial0/0/0 from FULL to Down: Interface down or detached area 0 authentication命令可对区域0 中的所有接口启用身份验证。通常,在R1 上只需使用该命令便可成功配置身份验证,因为R1 无须支持任何其它类型的身份验证。 最后,您将看到一条说明R1 与R2 的相邻关系已解除的控制台消息。R1 路由表中的所有OSPF 路由全都消失,直至它能够向R2 验证路由。即使未配置口令,R1 仍会要求所有邻居在OSPF 路由消息和更新中使用身份验证。 要为R1 配置简单身份验证口令,请进入连接至R2 的链路所对应的接口配置模式。然后发出 ip ospf authentication-key cisco123命令。该命令将身份验证口令设置 为cisco123。 R1(config-router)#interface S0/0/0 R1(config-if)#ip ospf authentication-key cisco123 步骤 2. 将R2 配置为使用OSPF 简单身份验证。 您已经在R1 上为整个区域配置了身份验证。由于R2 同时支持简单身份验证和MD5 身份验证,因此应在接口级别输入命令。 进入接口S0/0/0 的接口配置模式。利用ip ospf authentication 命令指明您要使用简单身份验证。然后发出ip ospf authentication-key cisco123命令将身份验证口令设置 为cisco123。 R2(config)#interface S0/0/0 R2(config-if)#ip ospf authentication R2(config-if)#ip ospf authentication-key cisco123 完成上述配置任务之后,您应该会看到一条控制台消息,该消息表明R1 与R2 之间的相邻关系已重新建立。OSPF 路由被重新加入路由表中。

MD5加密原理和Java实现

MD5加密原理和Java实现 MD5加密算法为现在应用最广泛的哈希算法之一,该算法广泛应用于互联网网站的用户文件加密,能够将用户密码加密为128位的长整数。数据库并不明文存储用户密码,而是在用户登录时将输入密码字符串进行MD5加密,与数据库中所存储的MD5值匹配,从而降低密码数据库被盗取后用户损失的风险。 Md5加密算法原理 MD5加密算法以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 在MD5加密算法中,首先需要对信息进行填充,使其字节长度对512求余数的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。 填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后再在这个结果后面附加一个以64位二进制表示的填充前的信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍数。这样做的原因是为满足后面处理中对信息长度的要求。 MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210 当设置好这四个链接变量后,就开始进入算法的四轮循环运算,循环的次数是信息中512位信息分组的数目。 将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量(文本中的一个子分组和一个常数)。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。以一下是每次操作中用到的四个非线性函数(每轮一个)。 F(X,Y,Z)=(X∧Y)∨(( X)∧Z) G(X,Y,Z)=(X∧Z)∨(Y∧( Z)) H(X,Y,Z)=X?Y?Z I(X,Y,Z)=Y?(X∨( Z)) 其中,?是异或,∧是与,∨是或,!是反符号。 如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。F 是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。所有这些完成之后,将A,B,C,D分别加上a,b,c,d。然后用下一分组数据继续运行算法,最后的输出是A,B,C和D的级联。最后得到的A,B,C,D就是输出结果,A是低位,D为高位,DCBA组成128位输出结果。代码实现: package encryption; /** * md5 类实现了RSA Data Security, Inc.在提交给IETF 的RFC1321中的MD5 message-digest 算法。 **/

什么是MD5码怎样校验MD5码

什么是MD5码?怎样校验MD5码? 2008-02-06 01:22 下载WinMD5校验器 为了确保您所下载的文件是完整和安全可靠的,我们建议您使用MD5校验,这里将介绍什么是MD5校验和如何使用MD5工具进行校验。 什么是MD5码? MD5码是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的“数字指纹”。 任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息码,并且如果这个文件被修改过,它的MD5码也将随之改变。 MD5码有什么用? 我们可以通过对比同一文件的MD5码,来校验这个文件是否被“篡改”过。 当我们下载了文件后,如果想知道下载的这个文件和官方网站的原始文件是否一模一样,就可以给自己下载的文件做个MD5码校验。 MD5码如何使用? 1、下载官方提供的MD5码校验工具下载WinMD5校验器 2、运行MD5码校验工具如WinMD5、MD5Check.exe 等 3、将要检查的文件拖动到窗口内,选择计算等待生成MD5码 4、检查生成的MD5码是否与官方网站提供的相同 5、如果得到的MD5码和官方网站公布的相同,可确认所下载的文件是完整且正确的。 6、如果MD5码和官方网站公布的不同,说明你下载的文件不完整或在网络下载的过程中出现错误,请您重新下载;也有可能该文件已被别人修改,为防止他人更改该文件时放入病毒或木马,请不要使用该客户端。 又文: 什么是MD5?怎样用MD5来校验下载的iso镜像文件? 一、什么是MD5? MD5 是一种加密技术,其典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,警察可以根据指纹来指认犯罪嫌疑人,那么,我们就可以根据文件的MD5 值来验证文件是否原始文件,以防止被篡改、加

MD5算法实验C++

一、实验目的 验证MD5加密算法,了解加密过程。 二、实验环境 软件工具:Visual C++ 6.0 操作系统:windows xp 三、实验思想 对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。 MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476。 当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。 将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向左环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。 四、实验数据(源代码) #include "global.h" #include "md5.h" /* Constants for MD5Transform routine. */ #define S11 7 #define S12 12 #define S13 17 #define S14 22 #define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10

基于MD5的文件完整性校验

实验四、基于MD5的文件完整性校 验程序设计与实现 1、实验目的 ◆验证MD5的工作原理。 ◆编写并调试基于MD5的文件完整性校验程序。 2、实验设备与环境 连网PC机(至少一台)。 计算机硬件要求:Intel Pentium5 处理器、256MB以上内存,Ethernet 网卡,网线若干。 计算机软件要求:Windows XP/win7操作系统,TCP/IP协议,Visual studio 系统。 3、实验要求 能够以浏览的方式打开指定的文件 能够计算指定文件的MD5 能够将文件的MD5结果转换为大写 文件内容改变后能够判别文件已被篡改

4、实验步骤 步骤1: 使用VC++的应用程序生成向导(MFC AppWizard[exe])创建一个基于对话框的工程,该工程的名称为201200824302MD5 步骤2: 主界面的设计:

同时在类向导里面添加需要的变量: 步骤3:添加每一个按钮的响应事件3.1宏定义的添加: #include #include

#include #include #include "windows.h" #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) #define RL(x, y) (((x) << (y)) | ((x) >> (32 - (y)))) //x向左循环移y位#define PP(x) (x<<24)|((x<<8)&0xff0000)|((x>>8)&0xff00)|(x>>24) #define FF(a, b, c, d, x, s, ac) a = b + (RL((a + F(b,c,d) + x + ac),s)) #define GG(a, b, c, d, x, s, ac) a = b + (RL((a + G(b,c,d) + x + ac),s)) #define HH(a, b, c, d, x, s, ac) a = b + (RL((a + H(b,c,d) + x + ac),s)) #define II(a, b, c, d, x, s, ac) a = b + (RL((a + I(b,c,d) + x + ac),s)) 3.2函数在声明: void md5(); 3.3函数的实现: void CMy201200824305_MD5Dlg::md5() { a=A,b=B,c=C,d=D; /**//* Round 1 */ FF (a, b, c, d, x[ 0], 7, 0xd76aa478); /**//* 1 */ FF (d, a, b, c, x[ 1], 12, 0xe8c7b756); /**//* 2 */ FF (c, d, a, b, x[ 2], 17, 0x242070db); /**//* 3 */ FF (b, c, d, a, x[ 3], 22, 0xc1bdceee); /**//* 4 */ FF (a, b, c, d, x[ 4], 7, 0xf57c0faf); /**//* 5 */ FF (d, a, b, c, x[ 5], 12, 0x4787c62a); /**//* 6 */ FF (c, d, a, b, x[ 6], 17, 0xa8304613); /**//* 7 */ FF (b, c, d, a, x[ 7], 22, 0xfd469501); /**//* 8 */ FF (a, b, c, d, x[ 8], 7, 0x698098d8); /**//* 9 */ FF (d, a, b, c, x[ 9], 12, 0x8b44f7af); /**//* 10 */ FF (c, d, a, b, x[10], 17, 0xffff5bb1); /**//* 11 */

MD5算法实现解读

md5加密算法c实现 md5的介绍的文章网上很多,关于md5的来历,用途什么的这里就不再介绍了。这里主要介绍代码。代码明白了就什么都明白了。 //////////////////////////////////////////////////////////////////// /*md5.h*/ #ifndef_MD5_H_ #define_MD5_H_ #defineR_memset(x,y,z)memset(x,y,z) #defineR_memcpy(x,y,z)memcpy(x,y,z) #defineR_memcmp(x,y,z)memcmp(x,y,z) typedefunsignedlongUINT4; typedefunsignedchar*POINTER; /*MD5context.*/ typedefstruct{ /*state(ABCD)*/ /*四个32bits数,用于存放最终计算得到的消息摘要。当消息长度〉512bits时,也用于存放每个512bits的中间结果*/ UINT4state[4]; /*numberofbits,modulo2^64(lsbfirst)*/ /*存储原始信息的bits数长度,不包括填充的bits,最长为2^64bits,因为2^64是一个64位数的最大值*/ UINT4count[2]; /*inputbuffer*/ /*存放输入的信息的缓冲区,512bits*/ unsignedcharbuffer[64]; }MD5_CTX; voidMD5Init(MD5_CTX*); voidMD5Update(MD5_CTX*,unsignedchar*,unsignedint); voidMD5Final(unsignedchar[16],MD5_CTX*); #endif/*_MD5_H_*/

rip MD5认证

通过邻居路由器之间的路由更新认证来防止无效的路由更新可能对网络造成的威胁和破坏对网络造成的威胁和破坏。。 【实验拓扑实验拓扑】】 注:以下实验假定已配置了RIP RIP V2路由协议及接口IP 地址地址。。 第一步第一步::在路由器Router1定义密钥链和密钥串定义密钥链和密钥串 Router1(config)#Router1(config)# key key chain chain zhao zhao !!定义一个密钥链zhao zhao,,进入密钥链配置模式密钥链配置模式 Router1(config Router1(config-- keychain)#keychain)# key key 1 !!定义密钥序号1,进入密钥配置模式密钥配置模式 Router1(config Router1(config-- keychain keychain--key)#key)# key key--string string cisco cisco !!定义密钥1的密钥内容为keya keya Router1(config Router1(config-- keychain keychain--key)#accept key)#accept--lifetime lifetime 00:00:0000:00:00 oct oct 1 20042004 infinite infinite infinite !定义密钥1的接收存活期从2004 年10月1日至无限日至无限((infinite infinite))

Router1(config Router1(config-- keychain keychain--key)#send key)#send--lifetime lifetime 00:00:0000:00:0000:00:00 oct oct 1 20042004 infinite infinite infinite !定义密钥1的发送存活期为从2004年10月1日至无限日至无限 Rout Router1(config er1(config er1(config-- keychain)#keychain)# key key 6 !!定义密钥序号1,进入密钥配置模式密钥配置模式 Router1(config Router1(config-- keychain keychain--key)#key)# key key--string string cisco cisco !!定义密钥6的密钥内容为keya keya Router1(config Router1(config-- keychain keychain--key)#accept key)#accept--lifetime lifetime 00:00:0000:00:00 oct oct 1 20042004 infinite infinite infinite Router1(config Router1(config-- keychain keychain--key)#send key)#send--lifetime lifetime 00:00:0000:00:0000:00:00 oct oct 1 20042004 infinite infinite infinite 验证测试验证测试::验证验证密钥链和密钥串配置信息密钥链和密钥串配置信息密钥链和密钥串配置信息 Router1#show Router1#show key key chain chain Key Key--chain chain ripkey:ripkey: key key key 1 ---- text text "zhao zhao"" accept accept accept lifetime lifetime (00:00:00(00:00:00 Oct Oct 1 2004)2004) - (infinite)(infinite) send send send lifetime lifetime (00:00:00(00:00:00 Oct Oct 1 2004)2004) - (infinite)(infinite) 第二步第二步::在接口模式下定义认证模式在接口模式下定义认证模式,,指定要引用的密钥链指定要引用的密钥链 Router1(Router1(config)#config)#config)# interface interface s 1/01/0 Router1(config Router1(config--if)#ip if)#ip rip rip authentication authentication mode mode md5md5 !! 定义认证模式为md5md5,,若用text 则表示明文认证则表示明文认证,,若不指明模式则缺省用

ospf MD5验证

Ospf的密文验证: 拓扑图如下: 在R1和R2之间做MD5验证: 三台路由器的基本配置: R1的基本配置: Router> Router>enable 进入到特权模式 Router # Router #configure terminal 进入到全局模式 Router(config)# 全局模式 Router(config)#hostname R1 对路由器重新命名为R1 R1(config)#int f0/0 R1(config-if)#ip address 12.12.12.1 255.255.255.0 配置接口IP 地址R1(config-if)#no shutdown

R1(config-if)#exit 退出到全局模式 R1(config)# 全局模式 R1(config)#interface s1/0 进入接口模式下 R1(config-if)#clock rate 64000 配置时钟频率 R1(config-if)#no shutdown 激活接口 R1(config-if)#end 直接退出到特权模式 R2的基本配置: Router> Router>enable 进入到特权模式 Router# 特权模式 Router #configure terminal 进入到全局模式 Router(config)# 全局模式 Router(config)#hostname R2 对路由器重命名为R2 R2(config)# R2(config)#interface f0/0 进入到接口f0/0 R2(config-if)#ip add 12.12.12.2 255.255.255.0 配置ip地址R2(config-if)#no shutdown 激活当前接口 R2(config-if)# R2(config-if)#exit 退出到全局模式 R2(config)# 特权模式

MD5算法的研究与实现-数据存储加密.

MD5算法的研究与实现-数据存储加密 1 引言随着网络通信技术和Internet的联系日益增强,出现了一系列与网络安全相关的问题:如对主机的攻击,网络上传输的信息被截取、篡改、重发等,由此,它对网络应用的进一步推广构成了巨大威胁,因此密码体制[1]就在这种背景下应运而生了。存储加密涉及大量文件、资料、新建等文档处理,需要高效,可靠的进行各种信息交换,同时对信息流转的整个过程需要有效的组织和监控。对数据的安全存储和安全传输具有较高的要求。数据加密技术不仅具有保证信息机密性的信息加密功能,而且具有数字签名、秘密分存、系统安全等性能。因而可以保障信息的机密性、完整性和准确性,防止信息被篡改、伪造和假冒[2]。虽然目前已有很多加密技术应用于各个领域,但是存在加密强度、运算量大等缺陷,因而本文提出了一种新的加密机制—MD5加密。同时,在竞争日趋激烈的今天,只有实行对数据加密的加强管理,建设性提高信息安全在网络中的地位,以至在竞争中求生存,以期更好地发展下去。 1.1 研究现状 MD5的全称[3]是Message-Digest algorithm 5(信息--摘要算法),MD5是一种不可逆的算法,即对生成的密文求逆,对应着无穷多个逆。在90年代初由MIT Laboratory for Computer Science(IT计算机科学实验室)和RSA Data Security Inc(RSA数据安全公司)的Ronald L.Rivest开发出来,经MD2,MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(把一个任意长度的字节串变换成一定长的大整数)。不管是MD2,MD4还是MD5,它们都需要获得一个随机长度的信息,并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但是MD2的设计与MD4和MD5完全不同,是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。Rivest在1989年开发出MD2算法,在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数,然后,以一个16位的检验和追加到信息末尾,并且根据这个新产生的信息计算出散列值。后来,Rogier和Chauvaud 发现,如果忽略了检验和,那样就将产生MD2冲突。MD2算法的加密后结果是唯一的---即没有重复。为了加强算法的安全性,Rivest在1990年又开发出MD4算法。MD4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod 512=448。然后,一个以64位二进制表示的信息的最初长度被添加进来。信息被处理成512位迭代结构的区块,而且每个区块要通过三个不同步骤的处理。Den Boer和Bosselaers以及其他人很快的发现了攻击MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到MD4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果),毫无疑问,MD4就此被淘汰掉了。一年以后,即1991年,Rivest开发出技术上更为趋近成熟的MD5算法。它在MD4的基础上增加了“安全-带子”(safety-belts)的概念。虽然MD5比MD4稍微慢一些,但却更为安全。这个算法很明显的由四个和MD4设计有少许不同的步骤组成。在MD5算法中,信息--摘要的大小和填充的必要条件与MD4完全相同。Den Boer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。Van Oorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-force hash function),而且他们猜测一个被设计专门用来搜索MD5冲

相关文档