python计算bin文件CRC

有时候我们需要计算bin文件的CRC值,比如OTA的固件(我们升级程序前,需要校验OTA固件的CRC值,判断固件数据是否正确)。这里给出一个简单的python脚本,用于计算bin文件的CRC32值,需要说明的是:这里的bin文件默认有4个字节的区域为0(偏移地址0x0000001c),用于存放计算后的CRC32值。

#! /usr/bin/env python
# -*- coding:utf-8 -*-
import binascii
import os
import sys

def crc2hex(crc):
    res=''
    for i in range(4):
        t=crc & 0xFF
        crc >>= 8
        res='%02X%s' % (t, res)
    return res

inputfile = "/data/test.bin"#实际存放的bin文件路径
isfile = os.path.isfile(inputfile);
print(inputfile);

fp = open(inputfile, "r+b")  #直接打开一个文件,如果文件不存在则创建文件
filesize = os.path.getsize(inputfile)
print("ZI app firmware size:", filesize, "bytes.")

#计算bin文件的CRC,首先清空CRC32区域的4个byte
fp.seek(0x1c, 0)#从bin文件开始,偏移地址为0x1c的地方存放bin的CRC32
clear4bytes = '00000000'
c4 =binascii.unhexlify(clear4bytes)
fp.write(c4)  #将CRC32存放的区域4bytes清零
fp.seek(0, 0)#从0开始读取整个bin
file_content = fp.read()#读整个文件内容到 file_content
crc = binascii.crc32(file_content)
print('CRC32:', hex(crc))

fp.seek(0x1c, 0)#从bin文件开始,偏移地址为0x1c的地方存放bin的CRC32
#存放计算CRC32四个字节
crcstr_2 = crc2hex(crc)
r=binascii.unhexlify(crcstr_2)
fp.write(r)
fp.close()

sys.exit(0)##正常退出

计算bin文件crc32主要用到python模块binascii,详细接口说明可以参考文档:https://docs.python.org/2/library/binascii.html。

运行

python CRC.py 

在这里插入图片描述
网上有许多在线计算文件CRC、MD5、SHA1等值的小工具,这里推荐一个比较好用的网站:
http://tools.jareye.com/crypto/fileverify.html
校验结果
在这里插入图片描述
与脚本计算的结果一致。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值