
正文
python的crc函数 crc8 python
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
python3 crc8校验-3步实现计算
最近项目中用到了跟硬件通信的crc8校验,花了点时间研究了一下python的crc8校验,但是一直没有找到好的技术突破。
google了一番,昨天测试了网上的几种方法都不正确,确定了使用crcmod库来实现,参考官方文档和国内的一遍文章,具体如下:
其实python3 只需要3步即可实现crc8校验,官方有crc8,但是默认是crc-8不是我要找的crc-8-maxim,而crcmod库是支持多种crc8计算的。
下面我是采用crc-8-maxim算法的,多项式:x8+x5+x4+1(二进制为100110001),0x31
正确运行结果为:0xd6
下面我们使用在线crc校验工具测试一下:
测试截图如下:
到此我们完成了crc8校验和。
目前有三种方式实现转换:
关于crc8的理论,本文不再赘述了。可以参考以下文章:
相关问答
Q1: Python计算CRC16
用于计算 modbus 通信协议的 CRC16 校验值。
举例: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 得到校验值为 0xB0CF (或 0xCFB0 )
计算方法,分两种,直接计算和查表计算。
Q2: python求crc32的值
本文实例讲述了python求crc32值的方法。分享给大家供大家参考。具体实现方法如下:
要想求CRC值,前面要import binascii
binascii.crc32(v) 求出了v的crc32值,这是一个long型,形如-1456387L,把这个值0xffffffff得到的值形如48a213L的形式。
然后把这个值用16进制表示出来、
具体代码如下:
def _crc32(self, v):
"""
Generates the crc32 hash of the v.
@return: str, the str value for the crc32 of the v
"""
return '0x%x' % (binascii.crc32(v) 0xffffffff) #取crc32的八位数据 %x返回16进制
Q3: python 通过crc32得到加密文件内容
crc检验原理实际上就是一个p位二进制序列之后附加一个r位二进制检验码(序列), 从而构成一个总长为n=p+r位的二进制序列, 附加在数据序列之后的这个检验码与数据序列的内容之间存在这某种特定的关系. 如果干扰因素使数据序列中的某一位或者某些位发生变化,这种特定的关系就会被破坏, 因此通过这种特性可以利用来爆破文件的内容.
文件的内容只有相同的时候python的crc函数他的crc校验才会一样.只要已知压缩文件的长度已知就可以获取他的crc32值来与python的crc函数我们的内容计算得到的值进行相互比较, 从而得到文件内容.(前提是文件内容长度够小才可以通过这种方法来实现,否则内容过长pc的算力有限)
现在有一个flag.zip 里面有一个flag.txt 文件 密码未知
使用模块如下:
得到文件的内容为4个字节长度
字典模块通过string模块得到
调用:
如果文件内容过长的话, 通过这种方式就不现实python的crc函数了.
解压文件得到如下的压缩文件
得到每个压缩包都是4个字节的大小, 压缩的文件为data.txt, 通过脚本得到文件内容, 脚本如下:
运行结果部分如下:
可以看见才多长这个东西很考验pc的性能, 然后直接进行base64解码, 得到的内容转为rar格式的文件, 然后补全文件头得到flag, 这里具体就不阐述python的crc函数了
得到的内容如下:
个人网站
Q4: 用python语言 如何将test1.txt中一串数字进行crc校验存入test2.txt中
给你写几个。这个本来很简单的。
import binascii
import struct,ctypes
fp1=open('test1.txt','rb')
fp2=open('test2.txt','wb')
c=fp1.read(1)
crc = binascii.crc32(c)
while True:
fp2.write(c)
c=fp1.read(1)
if not c:break
crc = binascii.crc32(" world", crc) 0xffffffff
fp2.write(struct.pack('l'crc))
fp2.close()
fp1.close()没有验证过是否正确,仅供参考。
python的crc函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于crc8 python、python的crc函数的信息别忘了在本站进行查找喔。






