问题标签 [crc64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4387 浏览

crc - 两个数据块产生相同 CRC64 值的可能性有多大?

我有一个使用 CRC64 值来确保数据完整性的缓存应用程序。我正在考虑放置一个额外的字段,一个时间戳,用于在各种缓存服务器之间传递数据并进行比较以查看数据是否已更改。

但是,这需要更改协议。虽然这不是什么大不了的事,但我已经有一个 CRC64 可以用作指示某些情况发生变化的指标。

有谁知道产生相同 CRC64 的两个数据块的统计数据?如果不是,我该如何计算或估计它的可能性?

0 投票
2 回答
857 浏览

hash - 我应该读取多少个字符串字符才能获得良好的哈希?

这里有一个小难题:如果您使用像 CRC-64 这样的哈希算法,那么需要读取字符串中的多少字节才能计算出一个好的哈希?假设您所有的字符串至少有 2 KB 长,那么使用整个字符串来计算缓存似乎是一种浪费或资源,但是您认为多少个字符就足够了?因为它等于 64 位,所以只有 8 个 ASCII 字符就足够了吗?使用超过 8 个 ASCII 字符不会毫无意义吗?我想知道你对此的看法。

更新:对于“良好的哈希”,我的意思是通过使用更多字节来计算哈希冲突的可能性不会减少。

0 投票
1 回答
472 浏览

crc - 反向消息CRC计算

假设您有此消息(ab,cd,ef)并且您有 ROHC (Robust header compression) CRC8 polynomial e0

有什么方法可以从最后一个字节开始向后计算消息的 CRC,并获得与在原始消息上计算相同的结果?

0 投票
3 回答
1764 浏览

crc - 使用 CRC 作为摘要来检测文件之间的重复项

CRC 和类似计算(例如 Fletcher 和 Adler)的主要用途似乎是用于检测传输错误。因此,我看到的大多数研究似乎都解决了检测两个数据集之间小规模差异的概率问题。我的需求略有不同。

以下是对该问题的非常近似的描述。细节比这复杂得多,但下面的描述说明了我正在寻找的功能。这个小小的免责声明旨在避免诸如“当您可以更轻松地以我建议的其他方式解决问题时,您为什么要以这种方式解决问题?”之类的答案?- 由于无数与此问题或帖子无关的原因,我需要以这种方式解决我的问题,因此请不要发布此类答案。

我正在处理分布式网络上的数据集集合(大小~1MB)。对这些数据集执行计算,速度/性能至关重要。我想要一种机制来避免重新传输数据集。也就是说,我需要某种方法来为给定大小的每个数据集生成唯一标识符 (UID)。(然后,我将数据集大小和 UID 从一台机器传输到另一台机器,接收机器只需要根据 UID 在本地没有数据时请求传输数据。)

这类似于使用 CRC 检查文件更改和使用 CRC 作为摘要来检测文件之间的重复之间的区别。我没有看到任何关于后者使用的讨论。

我不关心篡改问题,即我不需要加密强度散列。

我目前正在使用序列化数据的简单 32 位 CRC,到目前为止,这对我很有帮助。但是,我想知道是否有人可以推荐哪种 32 位 CRC 算法(即哪个多项式?)最适合在这种情况下最小化冲突概率?

我的另一个问题有点微妙。在我当前的实现中,我忽略了我的数据集的结构,实际上只是对表示我的数据的序列化字符串进行 CRC。但是,由于各种原因,我想按如下方式更改我的 CRC 方法。假设我的顶级数据集是一些原始数据和一些从属数据集的集合。我目前的方案本质上是连接原始数据和所有从属数据集,然后是 CRC 的结果。但是,大多数时候我已经有了从属数据集的 CRC,我宁愿通过将原始数据与从属数据集的CRC连接起来,然后 CRC来构造我的顶级数据集的 UID这种结构。问题是,

用一种可以让我讨论我的想法的语言来表达,我将定义一些符号。调用我的顶级数据集T,假设它由原始数据集R和从属数据集组成Si, i=1..n。我可以这样写T = (R, S1, S2, ..., Sn)。如果&表示数据集的拼接,我原来的方案可以认为是:

我的新方案可以被认为是

那么我的问题是:(1)如果TT'非常不同,什么CRC算法最小化prob( UID_1(T)=UID_1(T') ),什么CRC算法最小化prob( UID_2(T)=UID_2(T') ),这两个概率如何比较?

我对此事的(天真和不知情的)想法是这样的。T假设和之间的差异T'仅在一个从属数据集中,WLOG 说S1!=S1'。如果发生这种情况CRC(S1)=CRC(S1'),那么显然我们将拥有UID_2(T)=UID_2(T')。另一方面,如果CRC(S1)!=CRC(S1'),则 和 之间R & CRC(S1) & CRC(S2) & ... & CRC(Sn)R & CRC(S1') & CRC(S2) & ... & CRC(Sn)差异仅在 4 个字节上存在微小差异,因此 UID_2 检测差异的能力实际上与 CRC 检测传输错误的能力相同,即它仅检测错误的能力一些没有广泛分离的位。由于这是 CRC 的设计目的,我认为 UID_2 非常安全,只要我使用的 CRC 擅长检测传输错误。用我们的符号表示,

让我们称 CRC 未检测到几位错误的P概率,以及它未检测到大型数据集上的大差异的概率Q。上式可以大致写成

现在我将更改我的 UID,如下所示。对于“基本”数据,即T=(R)R 只是双精度、整数、字符、布尔值等的数据集,请定义UID_3(T)=(R). 然后对于T由下级数据集向量组成的数据集T = (S1, S2, ..., Sn),定义

假设一个特定的数据集T具有嵌套层次深的从属数据集m,那么,在某种模糊的意义上,我会认为

鉴于这些概率在任何情况下都很小,这可以近似为

因此,如果我知道我的最大嵌套级别m,并且我知道P并且Q对于各种 CRC,我想要的是选择为我提供最小值的 CRC Q + m*P。如果我怀疑可能是这种情况,P~Q那么上面的内容就简化了。我对 UID_1 的错误概率是P. 我对 UID_3 的错误概率是(m+1)Pm我的最大嵌套(递归)级别在哪里。

这一切看起来合理吗?

0 投票
1 回答
1866 浏览

crc - 为什么对 CRC-8 使用像 x^8 +x^2 +x+1 这样的生成多项式?

为什么使用像这样的生成多项式 G(x) =x^8 +x^2 +x+1 用于 CRC-8。如果这是最优的,我们如何证明它。或使用此多项式 G(x) = x^5 + x^4 + x^2 + 1 用于 CRC-5-ITU。

0 投票
2 回答
1952 浏览

c# - 没有等同于 CommonCrypto 的 CRC64 实现?

我正在将一些代码从 OSX 上的 C 移植到使用 CommonCrypto 和kCN_CRC_64_ECMA_182CRC64 实现的 C#。例如,使用 CommonCrypto,CRC 将通过以下方式计算:

CNCRC(kCN_CRC_64_ECMA_182, bytes, bytesLen, &crcResult)

这会输出正确的值。当使用 C# 库 HashLib(或任何其他代码)时,输出完全不同,例如,上面使用 HashLib 的等价物将是:

var checksum = HashFactory.Checksum.CreateCRC64(0x42F0E1EBA9EA3693UL); // ECMA 182 var result = checksum.ComputeBytes(bytes);

有任何想法吗?就输出而言,C# 中是否有与 Apple 的 CommonCrypto 等效的实现?

0 投票
1 回答
1802 浏览

c - CRC ECMA-182 参考

我想交叉检查 CRC64 ECMA-182 算法的 C 实现。

我尝试了一个在网上找到的不同的 C 代码片段,并尝试了两个在线 CRC 计算器,但每个都返回了不同的结果。

是否有一些参考实现或参考数据可以让我获得可靠的参考校验和?

0 投票
0 回答
48 浏览

mysql - 长整数字段对 Mysql 性能的影响

我想存储一个长度为 20 位以上的字符串的 crc64。我想了解在空间复杂度和联接方面存储大数字的性能后果。

任何帮助或建议将不胜感激。

谢谢

0 投票
1 回答
244 浏览

java - 从串口读取和写入给出“OUTPUT_BUFFER_EMPTY”(可能 crc calc 和校验和不正确)

我无法弄清楚我可能错在哪里以及要更改哪些内容才能使该程序能够与卡进行通信以进行读写。

这是串行协议,帧的一般结构如下:

LEN-----------------> 帧字符总数

IND----------------->指标

ADDR_ST--------->站地址

COD _OP--------->操作码

ADDR_DAT-------->给定地址

NR_DATI---------->操作数据编号

DATI---------------->写入操作数据

CRC---------------->检查校验和

这是我通过串口发送的帧:

字节 miastringa[]={0x08,0x3f,0x00,0x42,0x00,0x01,0,cks};

这是代码:

控制台日志给了我这个错误:

将“0”写入//./COM8

克:0

miastringa:[B@32cff37c

数量:8

.....................2

OUTPUT_BUFFER_EMPTY

感谢您提出的建议

0 投票
1 回答
136 浏览

parallel-processing - 多位数据的硬件 CRC 实现

我知道网上有免费的生成器,但我想了解如何为多位数据生成 CRC。当我们开始考虑并行输入位时,我希望了解逻辑的展开是如何工作的。串行实现很容易理解,但我需要了解并行实现背后的逻辑。