基于C++实现 MD5 算法的文件完整性校验程序

基于 MD5 算法的文件完整性校验程序

一、实验目的

① 深入理解 MD5 算法的基本原理。

② 掌握利用 MD5 算法生成数据摘要的所有计算过程。

③ 掌握 Linux 系统中检测文件完整性的基本方法。

④ 熟悉 Linux 系统中文件的基本操作方法。

⑤ 准确地实现 MD5 算法的完整计算过程。

⑥ 对于任意长度的字符串能够生成 128 位 MD5 摘要。

⑦ 对于任意大小的文件能够生成 128 位 MD5 摘要。

⑧ 通过检查 MD5 摘要的正确性来检验原文件的完整性。

二、实验内容

本实验使用 C++ 语言在 Linux 平台进行编程和运行,代码运行于腾讯云服务器主机。实现了实验要求中关于 MD5 的五项功能,列举如下:

./md5 -h 查看帮助

./md5 -t 打印程序的测试信息

./md5 -c nankai.txt 计算出的被测文件的 MD5 摘要并打印

./md5 -v nankai.txt 验证文件完整性方法一

./md5 -f nankai.txt nankai.md5 验证文件完整性方法二 实验涉及的文件包括:

(1) main.cpp:主函数文件。

(2) helpFunc.h:功能函数定义。

(3) helpFunc.cpp:功能函数实现。

(4) MD5.h:MD5 类定义。

(5) MD5.cpp:MD5 类的部分函数实现。

(6) MD5Update.cpp:MD5 类中 Update 相关函数实现。

(7) MD5codePro.cpp:MD5 类中进制转换、类型变换相关函数实现。

(8) nankai.txt 和 nankai.md5:测试文件

(9) md5:可执行文件

三、实验步骤及实验结果

本次实验步骤:

(1) main.cpp:主函数文件。

通过 unordered_map 数据结构存储各操作的 string 和对应的函数指针。

(2) helpFunc.h:各功能函数的定义,以及 include 程序需要的一些系统文件。

(3) helpFunc.cpp:功能函数实现。 各函数根据实验报告的要求调用 MD5 类的功能并打印信息。

(4) MD5.h:MD5 类定义,包括一些运算的 define。

(5) MD5.cpp:MD5 类的部分功能实现,主要为 Reset 函数,Tostring 函数,Transform 函数。

(6) MD5Update.cpp:MD5 类中 Update 相关函数,包括 2 个 public 函数和 1 个 private 函数。

(7) MD5codePro.cpp:MD5 类定义中进制转换、类型变换相关函数实现。

本次实验结果:

(1)./md5 -h

(2)./md5 -t

(3)./md5 -c nankai.txt

(4)./md5 -v nankai.txt

(5)./md5 -f nankai.txt nankai.md5

四、实验遇到的问题及其解决方法

本次实验中遇到的问题和解决方法列举如下:

(1)问题:大小端编址问题。 解决方法:遇到大小端编址问题,需要仔细检查,如 MD5 算法中有四个

32  比特的初始向量。它们分别是:A=0x01234567,B=0x89abcdef, C=0xfedcba98,D=0x76543210。实际赋值的时候应该赋值为 A=0x67452301, B=0xefcdab89,C=0x98badcfe,D=0x10325476。

五、实验结论

学习了 MD5 的原理和实现过程 学习了大端编址和小端编址

学习了在 C++ 的 STL 中存放函数指针

学习了 main()函数中的 argv 和 argc 参数的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值