标签: checksum

Perl中的快速字符串校验和函数,生成0..2 ^ 32-1范围内的值

我正在寻找具有以下属性的Perl字符串校验和函数:

  • 输入:未定义长度的Unicode字符串($string)
  • 输出:无符号整数($hash),0 <= $hash <= 2^32-1保持(0到4294967295,匹配4字节MySQL unsigned int的大小)

伪代码:

sub checksum {
    my $string = shift;
    my $hash;
    ... checksum logic goes here ...
    die unless ($hash >= 0);
    die unless ($hash <= 4_294_967_295);
    return $hash;
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,校验和函数应该快速运行,并且应该在目标空间(0.. 2^32-1)中稍微均匀地生成值以避免冲突.在这个应用程序中随机碰撞是完全非致命的,但显然我想在可能的范围内避免它们.

鉴于这些要求,解决这个问题的最佳方法是什么?

string perl checksum cpan hashcode

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

如何禁用Ivy对下载的.pom文件的SHA1检查?

由于此错误,我当前的Ivy配置无法解决:

problem while downloading module descriptor:
http://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.2.2/commons-fileupload-1.2.2.pom:
invalid sha1:
  expected=ad3fda4adc95eb0d061341228cc94845ddb9a6fe
  computed=0ce5d4a03b07c8b00ab60252e5cacdc708a4e6d8
Run Code Online (Sandbox Code Playgroud)

如何禁用(或解决)常春藤对SHA1校验和的检查?

checksum ivy

10
推荐指数
1
解决办法
6954
查看次数

获得多维数组校验和的最简洁方法是什么?

我正在做某些查询的SQL缓存.我正在使用CakePHP,因此查询条件在数组中:

array (
  0 => 
  array (
    0 => 'Tutorial.id IN ( SELECT tutorial_id FROM classifications WHERE classifications.product_id = 1 ) ',
  ),
  1 => 
  array (
    'Tutorial.status_id ' => 
    array (
      0 => 4,
      1 => 7,
    ),
  ),
  'OR' => 
  array (
    'Tutorial.user_id' => '40',
  ),
);
Run Code Online (Sandbox Code Playgroud)

我主要是在寻找product_id,但是还有一些其他可能的条件,所以我想将数组减少到校验和并将其附加到缓存文件的名称.这样我就有了tutorials_by_classification-413a86af之类的东西,而且我不需要通过数组来选择.

我已经在评论中看到了在php.net破坏 mutli-d数组的功能,但我想知道是否有更简单的方法来实现我的目标.

php arrays checksum cakephp multidimensional-array

10
推荐指数
2
解决办法
8892
查看次数

rsync如何对rsync执行校验和

使用rsync时有时rsync不会复制完成的所有文件,下面是我使用的代码.它们是一种在rsync之后进行校验和检查的方法,看看是否所有文件都已被复制,如果没有复制,直到所有文件都被复制了?

TEMP="/home/user/temp"
OPTS="-rav -h"

rsync $OPTS --stats user@example.com:/home/user/Local $TEMP
Run Code Online (Sandbox Code Playgroud)

linux bash rsync checksum

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

大多数静态数据流的CRC计算

背景:

我有一段1024字节的内存.最后1020个字节将始终相同.前4个字节将改变(产品的序列号).我需要CRC-16 CCITT为整个内存部分计算(0xFFFF起始,0x1021掩码)CRC_WHOLE.

题:

是否可以仅计算前4个字节的CRC CRC_A,然后应用如下所示的函数来计算完整的CRC?我们可以假设CRC_B已知最后1020字节的校验和.

CRC_WHOLE = XOR(CRC_A, CRC_B)
Run Code Online (Sandbox Code Playgroud)

我知道这个公式不起作用(尝试过),但我希望存在类似的东西.

checksum crc

10
推荐指数
2
解决办法
2889
查看次数

CRC16校验和:HCS08与Kermit对比XMODEM

我正在尝试将CRC16错误检测添加到Motorola HCS08微控制器应用程序中.但是,我的校验和不匹配.一个在线CRC计算器提供了我在PC程序中看到的结果和我在微观上看到的结果.

它调用micro的结果"XModem"和PC的结果"Kermit".

这两个古老的协议指定使用CRC16的方式有什么区别?

microcontroller checksum crc crc16

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

校验和:CRC或哈希?

抛开性能和安全性考虑,并假设具有完美雪崩效应的散列函数,我应该将其用于校验和数据块:CRC32或散列截断为N个字节?即错过错误的可能性较小?特别:

  1. CRC32与4字节哈希
  2. CRC32与8字节哈希
  3. CRC64与8字节散列

数据块将通过网络传输并重复存储在磁盘上.块大小可以是1KB到1GB.

据我了解,CRC32可以检测高达32位的翻转,具有100%的可靠性,但在此之后,其可靠性接近1-2^(-32)并且对于某些模式来说更糟糕.总是有一个完美的4字节散列可靠性1-2^(-32),所以请看一下.

8字节散列应该具有更好的整体可靠性(2^(-64)错过错误的机会),所以它应该优先于CRC32吗?CRC64怎么样?

我想答案取决于在这种操作中可能出现的错误类型.我们是否可能会看到稀疏的1位翻转或大量的块损坏?另外,鉴于大多数存储和网络硬件都实现了某种CRC,不应该意外地进行位翻转吗?

hash crc32 checksum error-detection

9
推荐指数
1
解决办法
6358
查看次数

获取字节数组的CRC校验和并将其添加到该字节数组

我有这个字节数组:

static byte[] buf = new byte[] { (byte) 0x01, (byte) 0x04, (byte)0x00, (byte)0x01,(byte)0x00, (byte) 0x01};
Run Code Online (Sandbox Code Playgroud)

现在,该字节数组的CRC校验和应该是0x60,0x0A.我希望Java代码重新创建此校验和,但我似乎无法重新创建它.我试过crc16:

static int crc16(final byte[] buffer) {
    int crc = 0xFFFF;

    for (int j = 0; j < buffer.length ; j++) {
        crc = ((crc  >>> 8) | (crc  << 8) )& 0xffff;
        crc ^= (buffer[j] & 0xff);//byte to int, trunc sign
        crc ^= ((crc & 0xff) >> 4);
        crc ^= (crc << 12) & 0xffff;
        crc ^= ((crc & 0xFF) << 5) & …
Run Code Online (Sandbox Code Playgroud)

java checksum modbus crc

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

这是找到校验和的正确方法吗?

我正在尝试计算某些数据的校​​验和.这是代码:

#include <stdio.h>
#include <string.h>

int main()
{
    char MyArray[] = "my secret data";
    char checksum = 0;
    int SizeOfArray = strlen(MyArray);

    for(int x = 0; x < SizeOfArray; x++)
    {
          checksum += MyArray[x];
    }
    printf("Sum of the bytes for MyArray is: %d\n", checksum);

    printf("The checksum: \n");
    checksum = (checksum ^ 0xFF);
    printf("%d\n",checksum);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Sum of the bytes for MyArray is: 70
The checksum:
-71
Run Code Online (Sandbox Code Playgroud)

代码中的修改:

#include <stdio.h>
#include <string.h>

int main()
{
    char MyArray[] = "my secret data"; …
Run Code Online (Sandbox Code Playgroud)

c checksum

9
推荐指数
2
解决办法
3810
查看次数

为什么在检查文件的 sha256sum 时得到 2 个不同的结果?

我正在尝试获取下载文件的校验和,以便我可以确保它从 ansible playbook 正确部署。我发现我得到两个不同的结果,具体取决于我是先下载文件,还是只是通过带有curl的管道检查它。

下载并检查:

$ wget https://github.com/drush-ops/drush/releases/download/8.1.15/drush.phar
$ sha256sum drush.phar 
6999d72e51577b1e20cfaec87152d9905b714f5812861692877b8424a4e2358a  drush.phar
Run Code Online (Sandbox Code Playgroud)

检查来自curl的管道:

$ curl -s https://github.com/drush-ops/drush/releases/download/8.1.15/drush.phar| sha256sum
c703007cf15cbabbeb510031ded52e7482f85dd3cce037bf9bcb7d7749acaa23  -
Run Code Online (Sandbox Code Playgroud)

你认为它们会是相同的结果吗?

curl checksum wget

9
推荐指数
1
解决办法
1946
查看次数