【问题标题】:Java Code for CRC 128 bitCRC 128 位的 Java 代码
【发布时间】:2014-04-08 19:37:06
【问题描述】:

我需要为从文档中提取的字符串计算 CRC 128 位校验和。

我在互联网上四处寻找,但找不到任何伪代码或 java 代码。

那么有人可以帮助我吗?

感谢您的关注。

【问题讨论】:

  • 有点不清楚你到底在问什么。您是在做与学习/实施算法(crc128、布隆过滤)有关的教育任务,还是只是在寻找库来为您做这件事?此外,如果您确实要求 SO 为您提供使用布隆过滤器组成 crc 计算的代码,那么这个问题太宽泛了。但是您可以针对每个问题提出一个问题,并且更具体地了解您是在寻找库还是算法理论。
  • 我正在写我的论文。我需要实现 crc128 的代码。
  • 那么我绝对认为您应该编辑问题以反映这一点 :-) 我实际上可能已经找到了对您有用的东西。
  • 感谢您的帮助:)

标签: java checksum crc 128-bit


【解决方案1】:

关于计算CRC校验和的维基百科文章包含对CRC算法的解释并显示伪代码

http://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks

【讨论】:

  • 但截至今天,维基百科文章并未提及 crc128。它在几个 64 位 CRC 处停止。
【解决方案2】:

这是完全未经测试的...但是,这里是一个用于对字符串进行 CRC 校验的 sn-p...更改宽度将改变它是 8 位、16 位、32 位、64 位等。如果您需要全尺寸,则还需要更改返回类型。

即设置宽度为 8 * 16,应该导致返回是最底部的 64 位 `

static int WIDTH = (8 * 16);// change this to 8*4 for int, and 8 * 2 for 16 bits
static int TOPBIT = (1 << (WIDTH - 1));
static int POLYNOMIAL = 0xD8; /* 11011 followed by 0's */
static long CRCFunc(final String msg)
   {
        final byte message[] = msg.getBytes();
        int nBytes = message.length;
        if(nBytes<1) return 0;
        long rem = 0; 
        int b;
        for(b=0;b<nBytes;++b)
        {
            rem ^= (message[b] << (WIDTH - 8));
            byte bit;
            for(bit=8;bit>0;--bit)
            {
                if ((rem & TOPBIT)>0)
                {
                    rem = (rem<< 1) ^ POLYNOMIAL;
                }
                else
                {
                    rem = (rem << 1);
                }
            }
        }
        return (rem);
    }
`

【讨论】:

  • 当然 0xD8 不能是这个算法的多项式,因为它应该设置底部位。也许,它应该被镜像。由于它是对称的,它的镜像将具有相同的位模式:0x1B。 0xD8 可能是“右移算法”的多项式:``` if ((rem&1) != 0) { rem = (rem >> 1) ^ (0xD8 > 1); } ```
  • 问题是关于 128 位多项式,而不是 64 位。
猜你喜欢
  • 2018-11-18
  • 2018-02-21
  • 2018-10-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
相关资源
最近更新 更多