问题标签 [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.
php - Javascript crc32 函数和 PHP crc32 与 UTF8 不匹配
我一直在尝试从 PHP 获取 crc32 函数以匹配 javascript 生成的结果。我已经浏览了我在网上找到的 4 个不同的 javascript crc32 库(1、2、3、4),它们都适用于 ascii,但是当你向它抛出 utf8 字符时,所有四个 js 库都输出相同的错误回答。
这个旧的 stackoverflow 问题似乎是最接近的答案,但在我的测试中仍然不起作用。
例如:
php:crc32('tést') = 727386373
javascript:crc32.genBytes('tést') = 3109344618
为方便起见,这里是最紧凑的版本。
我还应该注意 MySQL 的 crc32 匹配 php,所以我相当肯定 javascript 是错误的。任何人都知道如何让 javascript 在 utf8 字符串上执行正确的 crc32 吗?
c - 32位校验和算法比CRC32质量更好?
是否有任何 32 位校验和算法:
- 输入数据大小 < 1 KB 的哈希冲突概率更小?
- 碰撞以更均匀的分布命中。
这些相对于CRC32。由于 32 位存储空间的限制,我实际上不指望第一个属性。但对于第二个......似乎可能会有改进。
有任何想法吗 ?谢谢。(我需要具体的实现,在 C 中更好,但 C++/C# 或任何开始的东西也可以)。
php - 哈希函数和保护密码
我一直想知道很多关于不同形式的哈希和密码的问题。是的,我知道加盐,可能会将其添加到哈希中,但这没有任何加盐。我可能会使用动态加盐技术。
除了所有这些,我想知道做我下面展示的事情是否合乎逻辑?
Echo 输出以下内容:
1180170431
464e07afc9e46359fb480839150595c5
d27937f914ebe99ee315f04449678eccfb658191
回声输出:
5820170431464e07afc9e46359fb480839150595c51180170431d27937f914ebe99ee315f04449678eccfb658191
那么你认为像这样散列密码会是一种过度杀戮吗?我应该只坚持一种加盐的散列形式吗?我知道我不能成为第一个想到这样的事情的人,因为它看起来真的很明显。
以及您认为使用这种形式遇到散列冲突等会有多困难?
感谢您的任何回复!:)
java - java.util.zip.CRC32 中的 CRC-32 实现
Java CRC-32 类中使用了哪种 CRC-32 算法?java doc 没有提供任何细节。使用的多项式邮件和计算的初始值是什么?
c# - C# 中最快的字符串冗余校验和是多少?
我有一个字符串,长度为 20-30 个字符,包含区分大小写的字母和数字
我需要生成一个 2 个字符的校验和(在大小写敏感字母和数字中也是如此)
并将它们放在一起以获得唯一的ID
C# 中计算校验和以进行验证的最快方法是什么?
crc - SHA-512 与相同宽度的复合 CRC-32 的精度比较
我需要一个高度准确的校验和来检查长度约为 512KB 的数据。我以前知道并使用过几种不同的校验和,但直到现在我才真正需要如此关心准确性,所以我正在寻找这个:
如果我有一个使用多项式 0x1EDC6F41 的 CRC-32 复合(加起来最多 512 位),它会比 SHA-512 (SHA2) 散列更准确还是更差?
crc32 - 如果我知道开头和整个文件的 crc32,是否可以获得文件结尾的 crc32?
假设我有一个文件分成几部分:f = (p1, p2)。我计算了 crc32(p1) 和 crc32(f)。有没有一种简单的方法来计算 crc32(p2)?
我最感兴趣的是复杂度为 O(1) 的解决方案,但 O(n) 可以,其中 n = length(p1)(假设 length(p1) 远小于 length(p2))。
主要思想是不遍历文件的第二部分。
c# - 反转 CRC32
我找到了一个反转 CRC32 的代码,但我不知道它是如何工作的,因为我的编程不太好,我才刚开始。我只想比较两个文件,旧的和新的,然后在新的修复中,在文件末尾添加 4 个字节的 CRC32,所以这两个文件将具有相同的 CRC32。这是代码,在 C# 中:
python - 以太网 CRC32 计算 - 软件与算法结果
我正在尝试逐字节计算以太网数据包的帧校验序列(FCS)。多项式是0x104C11DB7
。我确实遵循了这里看到的 XOR-SHIFT 算法http://en.wikipedia.org/wiki/Cyclic_redundancy_check或这里http://www.woodmann.com/fravia/crctut1.htm
假设应该有 CRC 的信息只有一个字节。假设它是0x03。
step:向右填充 32 位
0x0300000000
将左侧的多项式和数据与其第一个不为零的位对齐,然后对它们进行异或
0x300000000 xor 0x209823B6E = 0x109823b6e
取余数对齐并再次异或
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
让我们继续上面的例子:
反转消息的位顺序。这代表了它们将一点一点地进入接收器的方式。
0x03
因此是0xC0
补充消息的前 32 位。请注意,我们再次用 32 位填充单个字节。
0xC000000000 xor 0xFFFFFFFF = 0x3FFFFFFF00
再次从上面完成 Xor 和 shift 方法。大约 6 步后,您将获得:
0x13822f2d
然后对上述位序列进行补码。
0x13822f2d xor 0xFFFFFFFF = 0xec7dd0d2
请记住,我们在第一步中颠倒了位顺序以获得以太网线上的表示。现在我们必须扭转这一步,我们终于完成了我们的任务。
0x4b0bbe37
想出这种方法的人应该是...
很多时候你真的想知道你收到的信息是正确的。为了实现这一点,您将收到包含 FCS 的消息并执行与上述相同的步骤 1 到 5。结果应该是他们所说的残留物。这是给定多项式的常数。在这种情况下,它是0xC704DD7B
。
正如mcdowella所提到的,您必须根据您使用的应用程序来玩弄自己的位,直到正确为止。
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
谢谢, 查尼