MD5 与 CRC32 验证通过蜂窝网络传输的 100kB 二进制数据的完整性

问题描述

我想知道我是否可以使用 CRC32 作为我的固件无线更新的完整性检查机制,或者我是否应该使用散列算法,例如 MD5?

我的情况:

该平台是一个 STM32F091RC(512KB 闪存,32KB RAM),它没有用于 MD5 或其他散列算法的硬件/外设。它确实提供了一个 CRC32 外设。固件下载的确切已知长度在 100KB 范围内,并将通过蜂窝数据网络(LTE - Cat M1 和 2G)传输。我不担心故意篡改 - 唯一担心的是由于噪声等引起的传输错误。所有传输都将使用 TCP 作为传输协议。据我所知,它们封装的蜂窝数据包和 TCP 数据包都有自己的数据包级 CRC。对于不大于 1500B 的数据包,TCP 数据包是 CRC16,我相信蜂窝数据包更小并且有自己的 CRC(不确定 CRC 大小)。这样就做了两套CRC校验,对坏包进行必要的重传。

CRC32 将更容易实现并且具有更小/无占用空间。我假设 MD5 将提供更高级别的完整性保证(如果这是正确的术语!),但是以复杂性和占用空间为代价(它也可能更慢,但这不是真正的问题,因为这些下载只是非常偶尔)。

我已经阅读了许多文章(关于堆栈溢出和其他地方),但在从 CRC32 切换到 MD5 或类似的散列算法之前,我仍然不清楚应该应用什么传输大小限制?一个帖子有:

编辑:查看关于 CRC 和 Lott 的回答的维基百科页面,这里是我们所拥有的: 小于 64 字节:8 位 CRC 小于 16K 字节:16 位 CRC 小于 512M 字节:32 位 CRC

因此,基于上述,我认为 CRC32 会很好,但我没有很高的舒适度,因为这是我发现的唯一带有这些类型数字的部分。

对我应该做什么的任何观点非常感兴趣 - CRC32 或 MD5/类似哈希算法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)