标签: crc

CRC何时比MD5/SHA1更适合使用?

何时使用CRC进行错误检测而不是更现代的散列函数(如MD5或SHA1)?前者在嵌入式硬件上更容易实现吗?

embedded hash crc

121
推荐指数
12
解决办法
8万
查看次数

检查两个文件是否相等的最快哈希算法是什么?

创建哈希函数的最快方法是什么,用于检查两个文件是否相等?

安全性不是很重要.

编辑:我通过网络连接发送文件,并确保双方的文件相同

hash file crc

58
推荐指数
5
解决办法
6万
查看次数

我应该使用什么校验和算法?

我正在构建一个系统,它需要能够找到是否已更新blob字节.我认为我应该计算它的校验和,存储它并稍后计算相同的校验和,以查看博客是否已更新,而不是存储整个blob(它们可以高达5MB).

目标是最小化以下(按此顺序):

  • 校验和的大小
  • 时间来计算
  • 碰撞的可能性(即使内容已被修改,也会发生2个相同的校验和).

我们的系统碰撞不超过1/1,000,000是可以接受的.问题不在于安全性,而在于更新/错误检测,因此罕见的冲突是可以的.(这就是为什么我把它放在最小化的东西中).

另外,我们不能自己修改文本的blob.

当然,md5,crcsha1浮现在脑海中,如果我想要一个快速的解决方案,我去了.然而,不仅仅是一个快速的解决方案,我正在寻找可以比较不同方法以及利弊的东西.

checksum md5 sha1 crc

52
推荐指数
1
解决办法
4万
查看次数

用于计算CRC16校验和的函数

我正在开发一个库,通过RS232或RS485连接提供简单可靠的通信.此代码的一部分涉及对数据使用CRC16校验和来检测线路噪声的损坏.我已经创建了一个计算CRC16校验和的函数,但它似乎没有输出正确的值.

我写的相关代码如下(也可以在这里找到).

#include <stdint.h>

#define CRC16 0x8005

uint16_t gen_crc16(const uint8_t *data, uint16_t size)
{
    uint16_t out = 0;
    int bits_read = 0, bit_flag;

    /* Sanity check: */
    if(data == NULL)
        return 0;

    while(size > 0)
    {
        bit_flag = out >> 15;

        /* Get next bit: */
        out <<= 1;
        out |= (*data >> (7 - bits_read)) & 1;

        /* Increment bit counter: */
        bits_read++;
        if(bits_read > 7)
        {
            bits_read = 0;
            data++;
            size--;
        }

        /* Cycle check: */ …
Run Code Online (Sandbox Code Playgroud)

c crc crc16

50
推荐指数
4
解决办法
17万
查看次数

如何使用boost :: crc?

我想使用boost :: crc,以便它的工作方式与PHP的crc32()函数完全相同.我尝试阅读可怕的文档和许多令人头疼的事情后来我没有取得任何进展.

显然我必须做以下事情:

int GetCrc32(const string& my_string) {
    return crc_32 = boost::crc<bits, TruncPoly, InitRem, FinalXor,
                   ReflectIn, ReflectRem>(my_string.c_str(), my_string.length());
}
Run Code Online (Sandbox Code Playgroud)

bits应该是32 ..其他事情是一个谜.一点帮助?;)

c++ boost crc

37
推荐指数
3
解决办法
2万
查看次数

使用32位哈希时发生冲突的可能性

我在数据库中有一个10个字符的字符串键字段.我已经使用CRC32来散列这个字段,但我担心重复.在这种情况下,有人能告诉我碰撞的可能性吗?

ps我的字符串字段在数据库中是唯一的.如果字符串字段的数量是100万,那么碰撞概率是多少?

algorithm hash probability crc collision

36
推荐指数
2
解决办法
3万
查看次数

数据长度与CRC长度

我见过8位,16位和32位CRC.

在什么时候我需要跳到更宽的CRC?

我的直觉反应是它基于数据长度:

  1. 1-100字节:8位CRC
  2. 101 - 1000字节:16位CRC
  3. 1001 - ??? 字节:32位CRC

编辑:查看有关CRC和洛特答案的维基百科页面,这里有'我们所拥有的:

<64字节:8位CRC

<16K字节:16位CRC

<512M字节:32位CRC

crc32 crc

34
推荐指数
3
解决办法
6万
查看次数

如何在rails上计算Ruby中的32位CRC?

我想在Ruby on rails上计算'输入字段值'的32位CRC值.需要示例代码,请帮助我任何人.

ruby crc32 crc

29
推荐指数
1
解决办法
1万
查看次数

尝试对数据包校验和/ CRC /哈希进行反向工程

我有一个旧的,不再制造的带有串口的电子设备.我正在尝试对此设备中使用的数据包CRC /校验和/散列进行逆向工程.

任何有敏锐眼光,有敏锐数学技能的人都可以破解这个东西?

这是我到目前为止所知道的......

  • 每个数据包总是21个字节.对于CRC /校验和/散列,19个字节的数据加上2个字节
  • 因此,这里没有长度或头部字节.哈希计算中涉及所有19个字节.
  • 我有能力使用该设备生成一定数量的数据包
  • 我的第一个想法是数据包具有某种CRC-16计算
  • 所以我跟着在www.cosc.canterbury.ac.nz/greg.ewing/essays/CRC-Reverse-Engineering.html中反转提示.
  • 验证我的数据包样本观察到上述网络链接中概述的"叠加原则".这表明它们具有数学XOR关系.

  • 开始感觉很好......但之后又难过了.无法确定CRC-16多项式.这些数据包哈希很可能不与CRC相关,而是一些家庭酿造方案.

  • 通过Ross N. Williams阅读"CRC错误检测算法的无痛指南"

  • 请参阅http://www.ross.net/crc/download/crc_v3.txt
  • 也用于应用:CRC Reveng - 逆向工程应用
  • 请参阅reveng.sourceforge.net
  • 仍然没有运气......
  • 不幸的是,我无法访问任何设备源/二进制代码

  • 还运行测试以查看是否使用了其他哈希,例如Fletcher的校验和

以下是我的数据包的各种样本.

0x47366B2EE00000000000751CEB5F3469543B585E2D
0x47366B2ED00000000000751CEB5F3469543B582A2C
0x47366B2EC80000000000751CEB5F3469543B580B2B
0x47366B2EC40000000000751CEB5F3469543B58BB2A
0x47366B2EC20040000000751CEB5F3469543B58DFE7
0x47366B2EC10000000000751CEB5F3469543B58A328
0x47366B2EC08000000000751CEB5F3469543B584127
0x47366B2EC04000000000751CEB5F3469543B588126
0x47366B2EC02000000000751CEB5F3469543B580525
0x47366B2EC01000000000751CEB5F3469543B580124

请注意以下有关这些数据包的信息......

  • CRC在数据包的最后2个字节上找到.
  • 如果我查看逻辑分析仪上的位,我已将字节表示为MSB优先
  • 因此,数据包0x47366B2EE00000000000751CEB5F3469543B585E2D在二进制中看作:
  • 01000111 ................................................. ............ 00101101
  • (0X47)............................................... ......................(0x2D)

  • 我不知道我的系统是大端还是小端,但是确定的字节是LSB优先的

  • 注意,对于上述10个数据包样本,每个包通过1位移位到10位位置而不同.除了第5个数据包,我不得不改变2位
  • 请参阅数据包的0x47366B2E部分之后的数据字节.

  • 只有模式我看到出现的是每个数据包上的最后一个字节递减一(2D,2C,...).(除了第5个数据包,我必须更改2位)

  • 最后一个字节不是某种序列号,因为我可以在任何时候以相同的值生成它们.
  • 但它可能暗示了所使用的数学哈希.

任何帮助表示赞赏!

hash checksum crc error-detection crc16

24
推荐指数
1
解决办法
2357
查看次数

在python中计算文件的crc

我想计算文件的CRC并获得如下的输出:E45A12AC.这是我的代码:

#!/usr/bin/env python 
import os, sys
import zlib

def crc(fileName):
    fd = open(fileName,"rb")
    content = fd.readlines()
    fd.close()
    for eachLine in content:
        zlib.crc32(eachLine)

for eachFile in sys.argv[1:]:
    crc(eachFile)
Run Code Online (Sandbox Code Playgroud)

这计算每行的CRC,但其输出(例如-1767935985)不是我想要的.

Hashlib以我想要的方式工作,但它计算md5:

import hashlib
m = hashlib.md5()
for line in open('data.txt', 'rb'):
    m.update(line)
print m.hexdigest()
Run Code Online (Sandbox Code Playgroud)

是否可以使用类似的东西zlib.crc32

python hash crc

21
推荐指数
6
解决办法
4万
查看次数

标签 统计

crc ×10

hash ×5

checksum ×2

crc16 ×2

crc32 ×2

algorithm ×1

boost ×1

c ×1

c++ ×1

collision ×1

embedded ×1

error-detection ×1

file ×1

md5 ×1

probability ×1

python ×1

ruby ×1

sha1 ×1