单片机固件MD5校验、AES加密、gzip压缩方案
方案简介
先使用glib对固件进行压缩;然后使用MD5对固件进行添加头部校验值;最后使用AES对固件进行加密。
MD5
MD5,全称Message Digest Algorithm 5,即信息摘要算法5,是一种被广泛使用的密码散列函数。它可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在RFC 1321标准中被加以规范。
MD5的功能(作为校验值)可以看这一篇:MD5数据加密方法
AES加密
AES加密,全称Advanced Encryption Standard,是一种对称的分组加密技术。它使用128位分组加密数据,每次加密16个字节,提供比WEP/TKIPS的RC4算法更高的加密强度。AES的加密码表和解密码表是分开的,并且支持子密钥加密,这种做法优于以前用一个特殊的密钥解密的做法。此外,AES算法支持任意分组大小,初始时间快,特别是它具有的并行性可以有效地利用处理器资源。
AES算法具有以下优点:
- 应用范围广:可以用来加密数据、电子邮件和网络传输,以保护隐私和网络数据的安全性。
- 等待时间短:相对于其他加密算法,AES加密速度较快。
- 相对容易隐藏:AES加密算法相对容易隐藏,不容易被破解。
- 吞吐量高:能够提供高吞吐量,适用于大规模的数据加密。
此外,AES加密的安全性非常高,它使用128位、192位或256位的密钥,可以抵抗各种类型的攻击,包括密码穷举攻击、密码分析攻击和密码拓展攻击。因此,AES加密算法被认为是目前世界上最安全、最先进的加密算法之一。
AES的具体功能及其实现原理可以参考这一篇:AES加密算法原理的详细介绍与实现
gzip
gzip是一个使用广泛的压缩程序,最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。它可以用来压缩文件,压缩后的文件名通常会添加“.gz”的扩展名。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成linux操作系统中比较流行的压缩文件格式。
zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数,能检测解压出来的数据完整性,支持读写gzip(.gz)格式的文件。该库使用DEFLATE算法压缩数据部分,这是一种Huffman编码的加强。
本次研究的是在QT上面使用glib库。
glib库的简介和主要函数的功能可以看这一篇:第三方库介绍——zlib库
在QT中使用MD5、AES、glib
QT环境
必须使用MinGW来构建项目
MD5
使用QT内嵌的QCryptographicHash库,这个库提供了以下加密类型,这里只使用了MD5。
类型 | 值 | 描述 |
---|---|---|
QCryptographicHash::Md4 | 0 | Generate an MD4 hash sum |
QCryptographicHash::Md5 | 1 | Generate an MD5 hash sum |
QCryptographicHash::Sha1 | 2 | Generate an SHA-1 hash sum |
QCryptographicHash::Sha224 | 3 | Generate an SHA-224 hash sum (SHA-2). Introduced in Qt 5.0 |
QCryptographicHash::Sha256 | 4 | Generate an SHA-256 hash sum (SHA-2). Introduced in Qt 5.0 |
QCryptographicHash::Sha384 | 5 | Generate an SHA-384 hash sum (SHA-2). Introduced in Qt 5.0 |
QCryptographicHash::Sha512 | 6 | Generate an SHA-512 hash sum (SHA-2). Introduced in Qt 5.0 |
QCryptographicHash::Sha3_224 | RealSha3_224 | Generate an SHA3-224 hash sum. Introduced in Qt 5.1 |
QCryptographicHash::Sha3_256 | RealSha3_256 | Generate an SHA3-256 hash sum. Introduced in Qt 5.1 |
QCryptographicHash::Sha3_384 | RealSha3_384 | Generate an SHA3-384 hash sum. Introduced in Qt 5.1 |
QCryptographicHash::Sha3_512 | RealSha3_512 | Generate an SHA3-512 hash sum. Introduced in Qt 5.1 |
QCryptographicHash::Keccak_224 | 7 | Generate a Keccak-224 hash sum. Introduced in Qt 5.9.2 |