2014-03-06 80 views
-1

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

我环顾四周,但无法找到任何伪码或Java代码。

那么,任何人都可以帮助我?

感谢您的关注。

+1

这是一个有点不清楚究竟什么你问。你正在做一个与学习/实现算法(crc128,bloom filtering)有关的教育任务吗?或者你只是在寻找图书馆来为你做这件事?另外,这个问题太广泛了,要问你是否确实要求SO为你提供用bloom滤波器构成crc计算的代码。但是你可以为每个问题提出一个问题,并且更具体地说你是否在寻找图书馆或算法理论。 – plc

+0

我正在研究我的论文。我需要实现crc128的代码。 –

+0

那么我绝对认为你应该编辑这个问题来反映:-)我其实可能已经找到了适合你的东西。 – plc

回答

0

这是完全未经测试......不过,这里是CRC的一个checksuming片段一个字符串...更改宽度将改变它是否是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); 
    } 
`