一、引言
校验文件完整性的重要性:在日常工作和生活中,我们常常需要从网络上获取各种数据,但这些下载的文件是否安全值得商榷;即使是安全的,如果下载不完整,也会导致文件不可用;更糟糕的是,文件可能被篡改,加入了木马、病毒或广告等。因此,下载数据时校验其完整性是非常必要的。
在小编(●—●)参与的项目中,C1、C1Pro和C1Max录音笔分别生成avc、avo和opus格式的音频文件。这些文件可以通过BLE和wifi热点两种方式传输到录音助手app。项目测试需要验证笔端生成的文件完整性以及传输到App后的文件完整性。
二、文件校验与校验方法
1、文件校验
文件校验是指对文件的MD5、SHA1和CRC32值进行检查。
MD5信息摘要算法(MD5 Message-Digest Algorithm)是一种广泛使用的密码散列函数,可以生成一个128位(16字节)的散列值,用于确保信息传输的完整性和一致性。
SHA-1(Secure Hash Algorithm 1,安全散列算法1)是一种密码散列函数,可以生成一个160位(20字节)的消息摘要,通常以40个十六进制数的形式呈现。
CRC(Cyclic redundancy Check)的全称为循环冗余校验,是数据通信领域中最常用的一种查错校验码。CRC32具有极强的检错能力,实现成本低,易于用编码器及检测电路实现。
2、校验值
校验值是一组十六进制数,不区分大小写,仅与文件内容相关。只要文件内容不变,校验值就不会改变。复制/剪切/粘贴、修改文件创建时间/访问时间、修改文件读/写/执行属性等操作都不会影响校验值。
3、在linux环境下校验文件完整性
在Linux下,可以直接使用md5sum、sha1sum和sha256sum命令来计算文件的校验值。
例如:
md5sum /works/Hello.mp3
sha1sum /works/Hello.mp3
sha256sum /works/Hello.mp3
4、在windows环境下校验文件完整性
在windows下,可以使用系统自带的certutil命令来计算文件的校验值。
certutil支持的算法包括:MD2、MD4、MD5、SHA1、SHA256、SHA384和SHA512。
certutil的使用方法是:执行“certutil -hashfile 文件名 校验值类型”,即可计算出对应文件的校验值。
例如:certutil -hashfile C:Hello.mp3 MD5
执行结果如图所示,该文件的MD5值为2ffcbdab360aa29d0ebc6aee94c0a625。
三、笔端传输文件验证,问题解决思路
1、(C1 Max录音笔文件)利用opusinfo获取每个opus文件的信息,并对比笔端文件与App端传输完成后的文件信息。
2、(C1、C1Pro、C1Max)录音笔生成的音频文件传输到App后,进行MD5校验。
MD5的唯一性:不同的输入会生成不同的结果,任何一个字节的改动都会导致MD5值变化。
avc、avo(自研数据类型)和opus文件传输验证
示例:笔端生成的opus音频文件传输到App后进行MD5校验,若校验值一致,则可确认传输后的文件是完整的。
四、自动校验思路及实现
1、批量校验思路
(1). 依次获取App和笔端目录下的音频文件路径(以opus为例);
(2). 通过命令行获取并提取MD5值,存储在对应的列表中;
(3). 对文件校验MD5值存储结果的列表listpen和listapp进行差集运算;
(4). 如果差集非空,则证明MD5校验存在不一致,即传输后的文件存在不一致的情况。
(5). 文件问题定位:App端存储的文件使用时间戳,可以转换为普通时间计时,找到对应的笔端文件。
2、校验结果
求差集示例——MD5校验全部一致,校验通过
求差集示例—MD5校验存在不一致情况
注:参考文章
https://www.php.cn/link/dd823d6e1e3a88daf0873b36aa204369
暂无评论内容