我正在编写一个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
值吗?
答案 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>
也许消息中包含一些填充或空格正在更改校验和?您至少应该能够使用上述方法进行复制。希望这会有所帮助!