问题标签 [crc32]

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 投票
4 回答
4002 浏览

php - Javascript crc32 函数和 PHP crc32 与 UTF8 不匹配

我一直在尝试从 PHP 获取 crc32 函数以匹配 javascript 生成的结果。我已经浏览了我在网上找到的 4 个不同的 javascript crc32 库(1234),它们都适用于 ascii,但是当你向它抛出 utf8 字符时,所有四个 js 库都输出相同的错误回答。

这个旧的 stackoverflow 问题似乎是最接近的答案,但在我的测试中仍然不起作用。

例如:

php:crc32('tést') = 727386373

javascript:crc32.genBytes('tést') = 3109344618

为方便起见,这里是最紧凑的版本。

我还应该注意 MySQL 的 crc32 匹配 php,所以我相当肯定 javascript 是错误的。任何人都知道如何让 javascript 在 utf8 字符串上执行正确的 crc32 吗?

0 投票
2 回答
2127 浏览

c - 32位校验和算法比CRC32质量更好?

是否有任何 32 位校验和算法:

  • 输入数据大小 < 1 KB 的哈希冲突概率更小?
  • 碰撞以更均匀的分布命中。

这些相对于CRC32。由于 32 位存储空间的限制,我实际上不指望第一个属性。但对于第二个......似乎可能会有改进。

有任何想法吗 ?谢谢。(我需要具体的实现,在 C 中更好,但 C++/C# 或任何开始的东西也可以)。

0 投票
2 回答
143 浏览

php - 哈希函数和保护密码

我一直想知道很多关于不同形式的哈希和密码的问题。是的,我知道加盐,可能会将其添加到哈希中,但这没有任何加盐。我可能会使用动态加盐技术。

除了所有这些,我想知道做我下面展示的事情是否合乎逻辑?

Echo 输出以下内容:

1180170431

464e07afc9e46359fb480839150595c5

d27937f914ebe99ee315f04449678eccfb658191

回声输出:

5820170431464e07afc9e46359fb480839150595c51180170431d27937f914ebe99ee315f04449678eccfb658191

那么你认为像这样散列密码会是一种过度杀戮吗?我应该只坚持一种加盐的散列形式吗?我知道我不能成为第一个想到这样的事情的人,因为它看起来真的很明显。

以及您认为使用这种形式遇到散列冲突等会有多困难?

感谢您的任何回复!:)

0 投票
4 回答
12850 浏览

java - java.util.zip.CRC32 中的 CRC-32 实现

Java CRC-32 类中使用了哪种 CRC-32 算法?java doc 没有提供任何细节。使用的多项式邮件和计算的初始值是什么?

0 投票
1 回答
975 浏览

c# - C# 中最快的字符串冗余校验和是多少?

我有一个字符串,长度为 20-30 个字符,包含区分大小写的字母和数字

我需要生成一个 2 个字符的校验和(在大小写敏感字母和数字中也是如此)

并将它们放在一起以获得唯一的ID

C# 中计算校验和以进行验证的最快方法是什么?

0 投票
0 回答
566 浏览

crc - SHA-512 与相同宽度的复合 CRC-32 的精度比较

我需要一个高度准确的校验和来检查长度约为 512KB 的数据。我以前知道并使用过几种不同的校验和,但直到现在我才真正需要如此关心准确性,所以我正在寻找这个:

如果我有一个使用多项式 0x1EDC6F41 的 CRC-32 复合(加起来最多 512 位),它会比 SHA-512 (SHA2) 散列更准确还是更差?

0 投票
0 回答
281 浏览

crc32 - 如果我知道开头和整个文件的 crc32,是否可以获得文件结尾的 crc32?

假设我有一个文件分成几部分:f = (p1, p2)。我计算了 crc32(p1) 和 crc32(f)。有没有一种简单的方法来计算 crc32(p2)?

我最感兴趣的是复杂度为 O(1) 的解决方案,但 O(n) 可以,其中 n = length(p1)(假设 length(p1) 远小于 length(p2))。

主要思想是不遍历文件的第二部分。

0 投票
2 回答
7777 浏览

c# - 反转 CRC32

我找到了一个反转 CRC32 的代码,但我不知道它是如何工作的,因为我的编程不太好,我才刚开始。我只想比较两个文件,旧的和新的,然后在新的修复中,在文件末尾添加 4 个字节的 CRC32,所以这两个文件将具有相同的 CRC32。这是代码,在 C# 中:

0 投票
4 回答
31523 浏览

python - 以太网 CRC32 计算 - 软件与算法结果

我正在尝试逐字节计算以太网数据包的帧校验序列(FCS)。多项式是0x104C11DB7。我确实遵循了这里看到的 XOR-SHIFT 算法http://en.wikipedia.org/wiki/Cyclic_redundancy_check或这里http://www.woodmann.com/fravia/crctut1.htm

假设应该有 CRC 的信息只有一个字节。假设它是0x03。

  1. step:向右填充 32 位

    0x0300000000

  2. 将左侧的多项式和数据与其第一个不为零的位对齐,然后对它们进行异或

    0x300000000 xor 0x209823B6E = 0x109823b6e

  3. 取余数对齐并再次异或

    0x109823b6e xor 0x104C11DB7 = 0x0d4326d9

由于没有更多位,0x03 的 CRC32 应该是0x0d4326d9

不幸的是,所有的软件实现都告诉我我错了,但我做错了什么或者他们做错了什么?

Python告诉我:

此处的在线工具http://www.lammertbies.nl/comm/info/crc-calculation.html#intr得到相同的结果。我的手工计算与上述软件使用的算法有什么区别?

更新:

原来在堆栈溢出时已经有一个类似的问题:

你在这里找到答案Python CRC-32 woes

虽然这不是很直观。如果您想更正式地描述如何处理以太网帧,可以查看以太网标准文档 802.3 Part 3 - Chapter 3.2.9 Frame Check Sequence Field

让我们继续上面的例子:

  1. 反转消息的位顺序。这代表了它们将一点一点地进入接收器的方式。

    0x03因此是0xC0

  2. 补充消息的前 32 位。请注意,我们再次用 32 位填充单个字节。

    0xC000000000 xor 0xFFFFFFFF = 0x3FFFFFFF00

  3. 再次从上面完成 Xor 和 shift 方法。大约 6 步后,您将获得:

    0x13822f2d

  4. 然后对上述位序列进行补码。

    0x13822f2d xor 0xFFFFFFFF = 0xec7dd0d2

  5. 请记住,我们在第一步中颠倒了位顺序以获得以太网线上的表示。现在我们必须扭转这一步,我们终于完成了我们的任务。

    0x4b0bbe37

想出这种方法的人应该是...

很多时候你真的想知道你收到的信息是正确的。为了实现这一点,您将收到包含 FCS 的消息并执行与上述相同的步骤 1 到 5。结果应该是他们所说的残留物。这是给定多项式的常数。在这种情况下,它是0xC704DD7B

正如mcdowella所提到的,您必须根据您使用的应用程序来玩弄自己的位,直到正确为止。

0 投票
1 回答
1398 浏览

c# - CRC32 返回 int32

我寻找计算 crc32 并返回 int32 的代码,但我发现只是返回 uint 或 hexa 或 string 的 func。当我试图将 crc32 转换为 int 时 - 它太大而不能成为 int。你知道如何计算返回int32的 crc32吗?

或者您可以更改此链接中的代码 - 代码将返回 int32 而不是 hexa?http://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net

谢谢, 查尼