无法在Node.js中正确生成crc32c校验和

时间:2020-06-15 05:37:21

标签: node.js checksum crc32

我正在编写一个Node.js应用程序,该应用程序从第三方接收WebSocket消息。消息包含一个CRC32C校验和值,我已经收到了有关如何生成消息校验和的简短说明:

Generate checksum with generate_crc32c algorithm:

checksum = generate_crc32c(messageAsString, strlen);

上面的值messageAsString是JSON WebSocket消息部分的字符串化版本。这些说明不解释strlen的值是什么,或如何生成它。我也不确定以上内容是特定语言还是伪代码。我尝试并未能从第三方那里获得更具体的说明。

要生成校验和,我正在使用Node.js模块fast-crc32c,并且非常简单地做到这一点:

const crc32c = require('fast-crc32c');

// .. generate `messageAsString` val

const calcChecksum = crc32c.calculate(messageAsString);

问题是我已经测试了几条消息,并且校验和永远不匹配。我是否缺少有关如何生成此校验和值的信息? strlen值重要吗?我找不到有关它的任何文档。我绝对可以肯定会误解messageAsString值吗?

1 个答案:

答案 0 :(得分:1)

我不认为您在调用函数时做任何错误。我相信这里最好的方法是建立一个简单的,可重复的测试脚本,将您的CRC32C校验和与第三方计算进行比较。

strlen值在Node.js中是多余的,因为字符串包含length属性,并且不像某些语言(例如c ++)那样依赖显式传递长度

如下所示:

const crc32c = require('fast-crc32c');

const messageAsString = "ABCDEF";
const calcChecksum = crc32c.calculate(messageAsString);

console.log( { checksum: calcChecksum.toString("16") })

我得到以下结果:

{ checksum: 'a4b7ce68' }

为此。

如果我们在https://crccalc.com/上使用(非常有用的)网站,我们可以看到这与他们对相同输入的计算相匹配。

一旦您开始使用此功能,建议您将测试消息中的数据输入此站点(确保您不输入高度敏感的信息!),并查看它们是否计算出与消息相同的校验和。< / p>

也许消息中包含一些填充或空格正在更改校验和?您至少应该能够使用上述方法进行复制。希望这会有所帮助!