我正在寻找具有以下属性的Perl字符串校验和函数:
$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
)中稍微均匀地生成值以避免冲突.在这个应用程序中随机碰撞是完全非致命的,但显然我想在可能的范围内避免它们.
鉴于这些要求,解决这个问题的最佳方法是什么?
由于此错误,我当前的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校验和的检查?
我正在做某些查询的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之类的东西,而且我不需要通过数组来选择.
使用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) 背景:
我有一段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)
我知道这个公式不起作用(尝试过),但我希望存在类似的东西.
我正在尝试将CRC16错误检测添加到Motorola HCS08微控制器应用程序中.但是,我的校验和不匹配.一个在线CRC计算器提供了我在PC程序中看到的结果和我在微观上看到的结果.
它调用micro的结果"XModem"和PC的结果"Kermit".
这两个古老的协议指定使用CRC16的方式有什么区别?
抛开性能和安全性考虑,并假设具有完美雪崩效应的散列函数,我应该将其用于校验和数据块:CRC32或散列截断为N个字节?即错过错误的可能性较小?特别:
数据块将通过网络传输并重复存储在磁盘上.块大小可以是1KB到1GB.
据我了解,CRC32可以检测高达32位的翻转,具有100%的可靠性,但在此之后,其可靠性接近1-2^(-32)
并且对于某些模式来说更糟糕.总是有一个完美的4字节散列可靠性1-2^(-32)
,所以请看一下.
8字节散列应该具有更好的整体可靠性(2^(-64)
错过错误的机会),所以它应该优先于CRC32吗?CRC64怎么样?
我想答案取决于在这种操作中可能出现的错误类型.我们是否可能会看到稀疏的1位翻转或大量的块损坏?另外,鉴于大多数存储和网络硬件都实现了某种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) 我正在尝试计算某些数据的校验和.这是代码:
#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) 我正在尝试获取下载文件的校验和,以便我可以确保它从 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)
你认为它们会是相同的结果吗?