标签: crc

如果文件日期和时间修改,文件的 MD5 是否会更改

我有一个 rar 文件,它是文件的集合。我已经使用 python 代码在 rar 文件上生成了 MD5 校验和,如下所示,然后假设 rar 文件生成的 md5 是 XXX。当我刚刚提取 rar 文件(没有修改/添加文件)并再次创建 rar 文件时,我观察到校验和已更改(除 XXX 之外)。

import hashlib
hashlib.md5("filename.rar").hexdigest()
Run Code Online (Sandbox Code Playgroud)

有没有像 CRC、校验和、SHA1 等算法,即使文件日期/时间发生变化并且文件的实际内容没有变化,计算出的校验和仍然相同?

python checksum md5 sha1 crc

3
推荐指数
1
解决办法
3696
查看次数

Java中的CRC计算

我正在使用x-modem协议和133字节数据包从serialport读取文件.我在读那个

      1 byte is SOH
      2 byte packet number
      3 byte nagative of packet number
next  128 bytes data
      2 bytes CRC sent from other side.
Run Code Online (Sandbox Code Playgroud)

我必须计算128字节数据的CRC和从另一侧发送的2字节crc,我必须使其成为单字节,并且必须与我计算的crc共同计算.我怎么能在java中这样做?

java serial-port core crc xmodem

2
推荐指数
1
解决办法
4472
查看次数

德尔福5至2010年

我在Delphi 5和2010中使用了相同的函数(OneWayEncrypt(edit1.Text)).
为什么结果不同?(或者我如何从Delphi 2010中获得相同的结果?)

uses Sysutils, Windows, Dialogs, classes;

function OneWayEncrypt(AStr: string): string;
PROCEDURE CalcCRC32 (p:  pointer; ByteCount:  DWORD; VAR CRCvalue:  DWORD);

implementation

const 
  table:  ARRAY[0..255] OF DWORD = 
  (
    //table consts are here
  );

PROCEDURE CalcCRC32(p: pointer; ByteCount: DWORD; VAR CRCvalue: DWORD);
VAR
  i: DWORD;
  q: ^Byte;
BEGIN
  q := p;
  FOR i := 0 TO ByteCount - 1 DO
  BEGIN
    CRCvalue := (CRCvalue SHR 8) XOR table[q^ XOR (CRCvalue AND $000000FF)];
    INC(q);
  END
END;

function OneWayEncrypt(AStr: …
Run Code Online (Sandbox Code Playgroud)

delphi crc delphi-2010

2
推荐指数
1
解决办法
1093
查看次数

提高Crc16计算的速度

我需要在大文件上用$ 1021多项式计算Crc16校验和,下面是我当前的实现,但是在大文件上它相当慢(例如90 MB文件大约需要9秒).

所以我的问题是如何改进我当前的实现(使其更快),我用Google搜索并查看了一些实现表查找的示例但我的问题是我不明白如何修改它们以包含多项式(可能是我的数学失败了).

{ based on http://miscel.dk/MiscEl/CRCcalculations.html }
function Crc16(const Buffer: PByte; const BufSize: Int64;
  const Polynom: WORD=$1021; const Seed: WORD=0): Word;
var
  i,j: Integer;
begin
  Result := Seed;

  for i:=0 to BufSize-1 do
  begin
    Result := Result xor (Buffer[i] shl 8);

    for j:=0 to 7 do begin
      if (Result and $8000) <> 0 then
        Result := (Result shl 1) xor Polynom
      else Result := Result shl 1;
    end;
  end;

  Result := Result and $FFFF;
end;
Run Code Online (Sandbox Code Playgroud)

delphi crc delphi-2010

2
推荐指数
1
解决办法
5601
查看次数

如何将表驱动的CRC实现转换为按位实现?

我有一些我需要测试的CRC方法.这些方法不是我自己写的.我能看到的最好方法是使用不同的技术实现CRC算法,然后比较结果.

目前,所有CRC例程都是以表驱动格式编写的.我似乎无法找到任何教程解释如何将代码转换为按位实现.我确信这是我对CRC的工作方式缺乏了解.

如果某人可以提供相同CRC例程的示例,则可以采用两种不同的方式实现.我在互联网上搜索过,并没有找到太多帮助我的问题.

以下是我需要测试的一种CRC算法的示例代码:

// This table implements the EPO CRC16 algorithm with a polynomial of 0x17531
static const uint16 s_EPOCRC16Table[] =
{
   0x0000U, 0x7531U, 0xEA62U, 0x9F53U, 0xA1F5U, 0xD4C4U, 0x4B97U, 0x3EA6U,
   0x36DBU, 0x43EAU, 0xDCB9U, 0xA988U, 0x972EU, 0xE21FU, 0x7D4CU, 0x087DU,
   0x6DB6U, 0x1887U, 0x87D4U, 0xF2E5U, 0xCC43U, 0xB972U, 0x2621U, 0x5310U,
   0x5B6DU, 0x2E5CU, 0xB10FU, 0xC43EU, 0xFA98U, 0x8FA9U, 0x10FAU, 0x65CBU,
   0xDB6CU, 0xAE5DU, 0x310EU, 0x443FU, 0x7A99U, 0x0FA8U, 0x90FBU, 0xE5CAU,
   0xEDB7U, 0x9886U, 0x07D5U, 0x72E4U, 0x4C42U, 0x3973U, 0xA620U, 0xD311U,
   0xB6DAU, 0xC3EBU, 0x5CB8U, 0x2989U, 0x172FU, 0x621EU, 0xFD4DU, 0x887CU,
   0x8001U, …
Run Code Online (Sandbox Code Playgroud)

c++ crc

2
推荐指数
1
解决办法
2344
查看次数

为什么帧校验序列位于以太网帧的末尾而不是其他位置

以太网帧校验序列始终附加到数据链路层中帧的末尾.为什么它被附加到帧的末尾而不是其他地方?

我考虑过它并认为它可能与如何计算CRC校验和有关,如果帧的结构是头+有效载荷+ crc而不是header + crc + payload,则更容易由硬件执行.

CRC执行形式(数据+填充)/除数的XOR除法,对于最终帧,填充由余数替换.接收器然后计算(数据+余数)/除数,并在结果为0时接受帧.

checksum ethernet data-link-layer crc

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

如何在php中生成8bit crc

可能重复:
PHP8中的CRC8-Check

有没有好的PHP 8bit CRC生成?我搜索过,找不到任何好的消息来源.我发现了16位:

function crc16($string) { 
  $crc = 0xFFFF; 
  for ($x = 0; $x < strlen ($string); $x++) { 
    $crc = $crc ^ ord($string[$x]); 
    for ($y = 0; $y < 8; $y++) { 
      if (($crc & 0x0001) == 0x0001) { 
        $crc = (($crc >> 1) ^ 0xA001); 
      } else { $crc = $crc >> 1; } 
    } 
  } 
  return $crc; 
} 
Run Code Online (Sandbox Code Playgroud)

php crc

2
推荐指数
1
解决办法
4650
查看次数

如果我没有同步这个方法,我会得到错误的值?

public static int getCRC16(byte[] bytes) {
    CRC16 crc = new CRC16();
    crc.reset();
    crc.update(bytes, 0, bytes.length);
    return (int) crc.getValue();
}
Run Code Online (Sandbox Code Playgroud)

大量的线程会遇到这种方法,如果我不同步我会对crc特定的线程出错吗?

java asynchronous crc

2
推荐指数
1
解决办法
144
查看次数

CRC位序混淆

我正在逐位计算CCITT CRC-16.我这样做是因为它是一个原型,以后应该移植到VHDL并最终在硬件中检查串行比特流.

在网上我发现了一位CRC-16更新步骤代码.写了一个测试程序,它的工作原理.除了一个奇怪的事情:我必须从最低位到最高位提供一个字节的位.如果我这样做,我会得到正确的结果.

在CRCITT的CCITT定义中,位应该是最高位到最低位.我想要计算CRC的数据流也是这种格式的,所以我现在的代码对我来说没什么用.

我糊涂了.我不希望以错误的方式喂食这些钻头可能会起作用.

问题:为什么可以编写CRC来以两个不同的位顺序获取数据,以及如何转换它首先接受数据MSB的单位更新代码?

作为参考,这是相关代码.已删除初始化和最终检查以保持示例简短:

typedef unsigned char bit;

void update_crc_single_bit (bit * crc, bit data)
{
  // update CRC for a single bit:
  bit temp[16];
  int i;

  temp[0] = data ^ crc[15]; 
  temp[1] = crc[0]; 
  temp[2] = crc[1]; 
  temp[3] = crc[2]; 
  temp[4] = crc[3]; 
  temp[5] = data ^ crc[4] ^ crc[15]; 
  temp[6] = crc[5]; 
  temp[7] = crc[6]; 
  temp[8] = crc[7]; 
  temp[9] = crc[8]; 
  temp[10] = crc[9]; 
  temp[11] = crc[10]; 
  temp[12] = data ^ crc[11] ^ crc[15]; 
  temp[13] …
Run Code Online (Sandbox Code Playgroud)

c language-agnostic crc

2
推荐指数
1
解决办法
4866
查看次数

使用相同的输入多次调用函数,但获得不同的返回值

我在Ubuntu 14.0.4中使用GNU C. 我编写了一个CRC_XOR()函数,并使用相同的输入参数多次调用它.但它很奇怪,每次通话有时会得到不同的结果.出了什么问题?示例代码在这里:

#include <stdio.h>
#include <stdlib.h>

char CRC_XOR(char *as_Pkt,int ai_len);
void DO_Get_CRC(void);
int main(void)
{
    DO_Get_CRC(); //get 01 00 02 03
    DO_Get_CRC(); //get 01 00 02 03
    DO_Get_CRC(); //get 01 00 02 00  (strange?)  
    DO_Get_CRC(); //get 01 00 02 03
    DO_Get_CRC(); //get 01 00 02 00  (strange?) 
    DO_Get_CRC(); //get 01 00 02 03
    DO_Get_CRC(); //get 01 00 02 00  (strange?) 
    exit(0);
}
/*
    use same input to invoke CRC_XOR()
*/
void DO_Get_CRC(void)
{
    char  ls_pkt[20];
    int   li_idx;
    short …
Run Code Online (Sandbox Code Playgroud)

c crc xor

2
推荐指数
1
解决办法
666
查看次数