2.3 MD5的应用 1) MD5在电子商务领域内的应用 copyright paper51.com 在很多电子商务和社区应用中,管理用户的Account是一种最常用的基木功能,尽管很多ApplicationServer提供了这些基本组件,但很多应用开发者为了管理的灵活性还是喜欢采用关系数据库来管理用户,懒惰的做法是用户的密码往往使用明文或简单的变换后直接保存在数据库中,因此这些用户的密码对软件开发者或系统管理员来说可以说毫无保密可言。 http://www.paper51.com 2) MD5在加密和解密技术上的应用 内容来自论文无忧网 www.paper51.com MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况小就可以确定用户登录系统的合法性,这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。 copyright paper51.com 正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为“跑字典”的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8个字节,同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P (62, 1) +P(62, 2) +...+p (62, 8),那也已经是一个天文数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。 内容来自www.paper51.com 3) MD5在注册信息中的应用 copyright paper51.com MD5算法的不可逆性在实际应用中产生什么作用呢。这里我举一个例子:我们到银行取钱输入密码时,一般是源码被存近了银行的主机,如果银行的内部人员或黑客侵入到数据库,很轻易地就窃取了你的源码。如果输入源码后,立即用MD5加密,把所得密文储存进系统。而以后用户每次仍是自己输源码,但我们只需比对MD5密文即可。系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。由于MD5不可逆,所以MD5密文无论被谁知道都无法窃得源码。现在大多数网站的数据库系统储存密码时都是使用MD5算法加密。 paper51.com
4) MD5在PGP中的应用 内容来自www.paper51.com
PGP是一个基于RSA公钥加密体系的邮件加密软件。可以用它对你的邮件保密以防止非授权者阅读,它还能对你的邮件加上数字签名从而使收信人可以确信邮件是你发来的。假设A要向B发一封信。PGP用MD5来计算邮件文摘,A用自己的私钥将邮件文摘加密,附一加在邮件上,再用B的公钥将整个邮件加密。这样这份密文被B收到以后,B用自己的私钥将邮件解密,得到A的原文和签名,B的PGP也从原文计算出一个128位的文摘来,再用A的公钥解密签名得到的数比较,如果符合就说明这份邮件确实是A寄来的。这样两个要求都得到了满足。 内容来自论文无忧网 www.paper51.com
5) MD5算法在保护文件系统完整性中的应用 copyright paper51.com MD5算法在文件系统完整性保护中的应用是利用它构造完整性检查程序,对文件系统的完整性进行分析和检查,监视文件系统的非授权或不期望的改变,检测和通知系统管理员改变的、增加的和删除的文件。我们从着重考虑承担关键任务的UNIX主机上文件系统完整性保护的角度出发,利用MD5报文摘要算法设计并实现了一个类Tripwire的文件系统完整性检查程序MAFFIC (MD5 AlgorithmFor File Integrity Checker)。其基木原理是,文件系统完整性检查程序(MAFFIC)采用的技术核心就是对每个要监控的文件利用MD5算法产生一个数字指纹并保留下来,如果文件的数字指纹与保留的数字指纹不一致,那么这个文件必定被改动过了,当MAFFIC运行在数据库生成模式时,根据管理员设置的一个配置文件对指定要监控的文件进行读取,对每个文件结合MD5加密手段生成相应数字指纹,并将这些结果保存在自己的数据库中,当怀疑系统被入侵时,由MAFFIC根据先前生成的数据库文件来做一次数字指纹的对照,如果文件被替换,则与MAFFIC数据库内相应数字指纹不匹配,这时它报告相应的文件被更改,管理员就明白系统遭受了入侵。 copyright paper51.com
6) MD5在数据库中的应用 paper51.com 网站往往将用户的账号,密码等信息使用非加密的方式存到数据库,账号使用类为VarChar的UserCount字段,同样,密码也是采用VarChar的password字段,但如果采用加密方式存储密码信息,就必须改变密码字段password的类型为了6位二进制方式,但MD5是单次加密算法,加密以后的信息不可以解密,所以如果用户丢失密码,任何人很难找到用户原来的密码。这时,网站失去了很重要的功能,就是获取已忘记的密码的功能。另外采用这样的加密方式,必须完全修改以前的用户资料,要求用户完全重新注册。 内容来自论文无忧网 www.paper51.com
此外,MD5还应用于802.1认证中,PAP-MD5认证采用MD5算法,用户密码不以明文方式在网上传输,从而保证了认证信息的安全。另外,大家比较熟悉的即时通信软件MyIM也使用MD5算法。利用MD5算法来进行文件校验的方案,被大量应用在软件下载站点、论坛数据库和系统文件安全等方面。 paper51.com 3 需求分析及设计方案设计中要求实现部分功能:MD5算法函数库;数据加密;数据存储等,最后将加密后的数据存放在ACCESS数据库中。 copyright paper51.com 3.1 主要功能模块 copyright paper51.com 3.1.1 数据加密 copyright paper51.com 主要是通过MD5算法的调用,对用户密码进行加密,使得加密前和加密后的密码都一起显示出来。 http://www.paper51.com 3.1.2 数据存储 copyright paper51.com 主要是将加密前和加密以后的数据存入到ACCESS数据库中[5]。 内容来自www.paper51.com 3.1.3 数据库设计 paper51.com 表2 字段值设置 内容来自论文无忧网 www.paper51.com
paper51.com 3.2 主要流程图 内容来自论文无忧网 www.paper51.com
copyright paper51.com 图11 主功能流程图 内容来自www.paper51.com
4 MD5算法的DLL封装 内容来自论文无忧网 www.paper51.com DLL是Dynamic Link Library的缩写,翻译为动态链接库,是Windows采用的一种极其重要的技术。DLL本身采用内存共享机制。动态链接库是一些过程和函数及资源(包括:Bit—map、Icon等)的集合,是一种二进制文件,它能够同时被若干个应用程序或其他DLL所调用。当某个DLL被调用的时候,Win32系统便在内存中建一个相应的副本及一个计数器,如有多个应用程序同时调用这个DLL时,变化的只是计数器的值,并不增加系统开销,当计数器为0的时候,系统便释放这个DLL所占用的资源。一个独立的DLL程序本身即为可执行程序,但它一般不能单独执行,它和普通可执行程序的区别就在于它并不主动获取CPU(中央处理器的简称)服务,通常是被其他真正的可执行程序或DLL所调用。 copyright paper51.com
4.1 加载时动态链接 copyright paper51.com
在加载时动态链接中,应用程序像调用本地函数一样对导出的DLL函数进行显式调用。要使用加载时动态链接,请在编译和链接应用程序时提供头文件(.h)和导入库文件(.lib)。当您这样做时,链接器将向系统提供加载DLL所需的信息,并在加载时解析导出的DLL函数的位置。 http://www.paper51.com 4.2 运行时动态链接 paper51.com 在运行时动态链接中,应用程序调用LoadLibrary 函数或LoadLibraryEx函数以在运行时加载DLL。成功加载DLL后,可以使用GetProcAddress 函数获得要调用的导出的DLL函数的地址。在使用运行时动态链接时,无需使用导入库文件。 内容来自www.paper51.com 4.3 DLL封装情况 内容来自www.paper51.com 主要是把定义申明导出为DLL,所以DLL的生成代码如下:同时需要注意的是,在调用的时候要记得把先前生成的MD5.dll及MD5.lib拷到源程序目录下,这样才能够保证运行正确不出错。特别注意是:MD5_CTX是MD5.DLL里定义的类,然后要用这个类生成自已的对象。也就是说它主要就是把类实例化,然后产生了对象后再调用了对象,然后就可以实现MD5加密了。 paper51.com #ifdefUSING_IMPORT 内容来自www.paper51.com #defineDLL_EXPORT __declspec(dllimport) paper51.com #else copyright paper51.com #defineDLL_EXPORT __declspec(dllexport) 内容来自www.paper51.com #endif copyright paper51.com #ifndef_LGY_MD5_H paper51.com #define_LGY_MD5_H copyright paper51.com /* MD5Class. */ 内容来自www.paper51.com classDLL_EXPORT MD5_CTX { paper51.com public: 内容来自www.paper51.com
MD5_CTX(); http://www.paper51.com virtual~MD5_CTX(); paper51.com voidMD5Update ( unsigned char *input, unsigned int inputLen); copyright paper51.com voidMD5Final (unsigned char digest[16]); 内容来自www.paper51.com private: http://www.paper51.com
unsignedlong int state[4]; paper51.com
unsignedlong int count[2]; 内容来自论文无忧网 www.paper51.com unsignedchar buffer[64]; copyright paper51.com
unsignedchar PADDING[64]; paper51.com
private: http://www.paper51.com voidMD5Init (); 内容来自论文无忧网 www.paper51.com voidMD5Transform (unsigned long int state[4], unsigned char block[64]); 内容来自www.paper51.com voidMD5_memcpy (unsigned char* output, unsigned char* input,unsigned int len); http://www.paper51.com
void Encode(unsigned char *output, unsigned long int *input,unsigned int len); copyright paper51.com void Decode(unsigned long int *output, unsigned char *input, unsigned int len); 内容来自www.paper51.com
voidMD5_memset (unsigned char* output,int value,unsigned int len); 内容来自www.paper51.com }; copyright paper51.com #endif copyright paper51.com 下面为部分调用代码[6]: 内容来自www.paper51.com MD5_CTXmd5T; http://www.paper51.com unsignedchar digest[16]; 内容来自论文无忧网 www.paper51.com md5T.MD5Update((unsigned char*)pBuf,iTotal); 内容来自论文无忧网 www.paper51.com
md5T.MD5Final(digest); http://www.paper51.com 5 具体设计流程及实现 paper51.com 5.1 读取的设计和实现 paper51.com 主要是在界面里显示数据库[7]的内容,并把密码加密[8],显示加密后的密码。主要流程如下: paper51.com
内容来自论文无忧网 www.paper51.com 图12 读取功能的实现流程图 内容来自www.paper51.com 5.2 插入的设计和实现 http://www.paper51.com 在插入数据时,如果没有先读取数据在进行插入的话,就会显示“姓名和密码信息不能为空”,如果读取了数据在进行插入,就会显示插入后的数据和以前数据库中已经存在的数据,主要流程如下: 内容来自论文无忧网 www.paper51.com
paper51.com 图13 插入功能的实现流程图 内容来自www.paper51.com
5.3 修改的设计和实现 内容来自论文无忧网 www.paper51.com 在插入数据时,如果没有先读取数据就进行插入的话,就会显示“表中记录数为空或者姓名密码没有设置”,如果读取了数据再进行插入,就会显示插入后的数据和以前数据库中已经存在的数据,主要流程如下: 内容来自www.paper51.com
paper51.com 图14 修改功能的实现流程图 http://www.paper51.com
5.4 删除的设计和实现 内容来自论文无忧网 www.paper51.com 需要先读取数据,然后才能进行删除,数据被删除后,界面里不再显示,数据库里也不再显示,在界面和数据库中只会显示还未被删除的数据。 内容来自www.paper51.com http://www.paper51.com 图15 删除功能的实现流程图 http://www.paper51.com 6 调试与分析 paper51.com
6.1 概述 http://www.paper51.com paper51.com 该设计主要是针对MD5算法的应用和理解,对算法进行研究和实现,并在此基础上编程实现MD5算法函数和封装;同时开发一个简单的数据存储程序验证算法的正确性和可用性。最后是将数据存入到ACCESS数据库中。 内容来自论文无忧网 www.paper51.com http://www.paper51.com
copyright paper51.com
http://www.paper51.com
|