论文部分内容阅读
网络通讯已经被广泛的应用到现在的日常生活和工作中。但是,由于各种原因的存在,比如:黑客、病毒、网络不通畅等多种原因,导致在网络通讯中传输的文件缺失、被恶意修改甚至是感染病毒。而加密算法的应用,使网络通讯中传输的数据得到了一定程度的保障。
Hash算法是一种不可逆的加密算法,通过Hash算法可以对目标文件计算出一组校验码。在通讯中,通过对文件校验码的比较从而知道文件是否被改变。由于其算法的严苛性和不可逆性,从而使得文件在网络通讯中的传输会更安全。目前,基本上所有的压缩、防毒、文件下载软件都会用到Hash算法作为其文件校验的手段。不仅如此,在关系国家机密的文件同样会使用Hash算法作为文件保护的手段之一。
本文叙述了加密算法在网络通讯中的作用,重点分析了CRC32、MD5和SHA1这三种算法的原理,并通过C++代码加以实现。最后通过实际测试中对三种Hash算法的安全性、冲突性和算法的效率等若干指标的比较。发现,CRC32算法已经成熟,实现简单,但效率一般且安全性不高;MD5算法是目前最为成功的Hash算法之一,基本上没有被破解的可能,效率高,十分稳定,被很多高机密领域所采用。其自身也没有太过明显的缺点和漏洞;SHA-1算法安全性很强,但效率太低。所以,最终得出MD5算法从算法安全性、冲突性及效率等各方面综合考虑是最佳的选择。
但是,无论那种Hash算法都需要生成一个校验码用来对被检查的文件进行检查。考虑到项目的需求是不希望有多余的数据或者文件被传给数据接收者,最终选择了算法上不是太完满的CRC32算法。因为CRC32算法得到的校验码刚好和PE文件格式中的Win32VersionValue这个可选字段的长度一样。
最后选择出CRC32做为该项目中对文件检验的算法。将生成的文件摘要写入到文件的可选字段Win32VersionValue中,使校验码和被校验的文件更紧密的结合在一起,进一步的增加了文件被破解的概率。