标签: checksum

创建列的聚合校验和

我想计算聚合列中所有值的校验和.

换句话说,我想做一些相当于

md5(group_concat(some_column))
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是:

  1. 效率低下.在将列传递给md5函数之前,必须将列的所有值作为字符串连接在一些临时存储中
  2. group_concat的最大长度为1024,之后其他所有内容都将被截断.

(如果你想知道,你可以确保值的连续符合一致的顺序,但是,不管你信不信,group_concat()接受其中的order by子句,例如group_concat(some_column order by some_column))

MySQL提供非标准的按位聚合函数BIT_AND(),BIT_OR()和BIT_XOR(),我认为这对这个问题很有用.在这种情况下,该列是数字,但我很想知道是否有一种方法可以使用字符串列.

对于此特定应用程序,校验和不必是安全的.

mysql sql checksum

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

SQL Server 2005中的CHECKSUM()冲突

我有一个5,651,744行的表,主键由6列(int x 3,smallint,varchar(39),varchar(2))组成.我希望使用此表和另一个共享此主键的表以及添加的另一列但具有37m行来提高性能.

在预期添加列以创建哈希键时,我进行了分析并发现了18,733次冲突.

SELECT  SUM(CT)
FROM    (
         SELECT HASH_KEY
               ,COUNT(*) AS CT
         FROM   (
                 SELECT CHECKSUM(DATA_DT_ID, BANK_NUM, COST_CTR_NUM,
                                 GL_ACCT_NUM, ACCT_NUM, APPN_CD) AS HASH_KEY
                 FROM   CUST_ACCT_PRFTBLT
                ) AS X
         GROUP BY HASH_KEY
         HAVING COUNT(*) > 1
        ) AS Y

SELECT  COUNT(*)
FROM    CUST_ACCT_PRFTBLT
Run Code Online (Sandbox Code Playgroud)

它差不多两倍 BINARY_CHECKSUM()

考虑到我所覆盖的目标空间的相对较小量,这看起来是否太高(.33%)?如果碰撞很高,那么在连接中加入这个制造的密钥是否有利于每行额外4个字节的成本,因为你仍然必须加入常规列来处理偶尔的碰撞?

sql checksum sql-server-2005 hash-collision

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

充分利用糟糕的"校验和"算法

我正在研究一种通过串行端口控制8位MCU的现有驱动程序.MCU有许多不同类型的固件,但它们都有共同的方法来尝试确保链路完整性.这个方法不是很强大,我正在寻找有关驱动程序如何修改其行为以充分利用它的想法.

命令是带有行号和校验和的gcode:

N3 T0*57
N4 G92 E0*67
N5 G28*22
N6 G1 F1500.0*82
N7 G1 X2.0 Y2.0 F3000.0*85
N8 G1 X3.0 Y3.0*33
Run Code Online (Sandbox Code Playgroud)

行号必须是顺序的(但可以重置M110).如果校验和不匹配或行号是失序的固件将回复Resend: nnn这里nnn是最后的成功N加1."校验"是极其原始:

        // Calc checksum.
        byte checksum = 0;
        byte count = 0;
        while(instruction[count] != '*')
                checksum = checksum^instruction[count++];
Run Code Online (Sandbox Code Playgroud)

主要问题是主要错误机制是由于中断被保持关闭导致1字节MCU FIFO溢出而丢弃的字节.实际的串行总线在FTDI(或类似)USB串行桥和MCU之间只有几厘米,因此不太可能出现误码.我从来没有在固件的回复中发现有点错误.

正如您所看到的,上面的算法会检测到一个丢弃的字节,但如果丢弃了两个相同的字节(任何地方!),结果仍然匹配.因此F3000.0(进给率3000mm/min)可以转化为F30.0并仍然匹配.此外,字符集非常小,因此永远不会涉及某些位.

驱动程序可以做些什么来使给定的行更健壮吗?

  • 添加或删除尾随(或甚至前导)零
  • 添加或删除空格
  • 重新排序单词(与之X1 Y1相同Y1 X1)
  • 添加或删除空格
  • 在一定容差范围内对值进行"无关紧要"的修改(例如,F2999.9而不是F3000)
  • 重置行号以获取N给定行的特定行
  • 打破单个命令分成多个等效的命令(例如G1 X2变为 …

embedded checksum serial-port driver

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

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

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

#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
查看次数

HTTP响应头中的校验和 - 为什么不呢?

当我开始从HTTP服务器下载文件时,我想知道某种文件校验和(如SHA-256哈希或其他任何东西).它可以作为HTTP响应头之一传输.

Http etag是类似的,但它只用于使浏览器缓存无效,而且从我注意到,每个网站都以不同的方式计算它,它看起来不像我知道的任何哈希.

某些软件下载站点提供各种文件校验和作为单独的文件进行下载(例如,最新的Ubuntu 16.04 SHA1哈希:http://releases.ubuntu.com/16.04/SHA1SUMS).将它们包含在HTTP响应头中并强制浏览器在下载结束时计算它(并且不强制用户手动执行)会不会更容易.

我想整个基于HTTP的互联网都在工作,因为我们使用的是TCP协议,它是可靠的,并确保接收的字节与服务器发送的字节完全相同.但是如果TCP是如此"酷",我们为什么要手动检查文件哈希(请参阅Ubuntu示例)?在文件下载期间(客户端/服务器磁盘损坏,服务器端的文件修改等),很多事情都可能出错.如果我是对的,一切都可以通过在下载开始时传递文件哈希来解决...

hash https checksum http

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

由于正斜杠,Nvm节点安装校验和不匹配

我正在学习使用nvm来管理节点版本,但我的所有安装都失败并出现错误:校验和不匹配.

唯一的区别是找到的校验和中的'\':

计算校验和与shasum -a 256校验和不匹配:'\ 0bdd8d1305777cc8cd206129ea494d6c6ce56001868dd80147aff531d6df0729'found,'0bdd8d1305777cc8cd206129ea494d6c6ce56001868dd80147aff531d6df0729'预期.nvm:安装v6.9.1失败了!

checksum nvm

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

获取非常大的文件的MD5校验和

我编写了一个脚本,它读取目录中的所有文件,并为每个文件返回md5哈希值.但是,它不会为相当大的文件呈现任何内容.我假设解释器为最大处理时间设置了一些值,并且由于获取此值需要很长时间,因此它只是跳到其他文件.无论如何通过PHP获取大文件的md5校验和?如果没有,是否可以通过cpanel的chron工作完成?我在那里试了一下,但似乎我的md5sum命令似乎没有被处理过:我从未收到过带有哈希的电子邮件.这是我已经写过的PHP.对于合理大小的文件,这是一个非常简单的代码和工作文件:

function md5_dir($dir) {
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                echo nl2br($file . "\n" . md5_file($file) . "\n\n");
            }
            closedir($dh);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

php hash checksum md5

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

检查两个图像文件是否相同..Checksum或Hash?

我正在做一些图像处理代码,我从URL下载一些图像(作为BufferedImage)并将其传递给图像处理器.

我想避免多次将同一图像传递给图像处理器(因为图像处理操作成本很高).图像的URL端点(如果它们是相同的图像)可能会有所不同,因此我可以通过URL来防止这种情况.所以我打算做一个校验和或散列来确定代码是否再次遇到相同的图像.

对于md5,我尝试了Fast MD5,它为图像生成了一个20K +字符长度的十六进制校验和值(一些样本).显然,在数据库存储方面存储这个20K +字符哈希是一个问题.因此我尝试了CRC32(来自java.util.zip.CRC32).它确实产生了比哈希小得多的长度校验和.

我确实理解校验和和哈希用于不同的目的.出于上述目的,我可以使用CRC32吗?它会解决目的还是我必须尝试比这两个更多的东西?

谢谢,阿比

java hash checksum image-processing integrity

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

校验和远程文件

有没有办法获得一个程序,我可以通过命令行运行,该程序将执行远程文件的校验和?例如,获取https://stackoverflow.com/opensearch.xml的校验和

我希望能够获得有关新rss/xml条目何时可用的更新.我以为我可以偶尔对文件进行校验和,如果它不同则必须有更新.我正在寻找一个shell脚本来检查新的rss/xml数据.

linux terminal command-line curl checksum

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

加载GCC向量扩展的数据

GCC的向量扩展提供了一种不错的,合理的可移植方式,可以访问不同硬件架构上的某些SIMD指令,而无需借助硬件特定的内在函数(或自动向量化).

一个真实的用例,就是计算一个简单的加法校验和.有一点不明确的是如何将数据安全地加载到矢量中.

typedef char v16qi __attribute__ ((vector_size(16)));

static uint8_t checksum(uint8_t *buf, size_t size)
{
    assert(size%16 == 0);
    uint8_t sum = 0;

    vec16qi vec = {0};
    for (size_t i=0; i<(size/16); i++)
    {
        // XXX: Yuck! Is there a better way?
        vec += *((v16qi*) buf+i*16);
    }

    // Sum up the vector
    sum = vec[0] + vec[1] + vec[2] + vec[3] + vec[4] + vec[5] + vec[6] + vec[7] + vec[8] + vec[9] + vec[10] + vec[11] + vec[12] …
Run Code Online (Sandbox Code Playgroud)

gcc checksum simd vectorization

8
推荐指数
1
解决办法
1751
查看次数