黑莓CRC32问题

时间:2011-07-04 09:59:09

标签: java blackberry crc32

我已经被困在这几天了,似乎无法得到它。我希望通过张贴在这里,我会有一个顿悟并在发布后30秒解决这个问题! :d 这就是......

我需要加密字符串,将其附加到我的URL,然后将其发送到服务器。步骤如下:

1. Build the string (for this post, I'm using a constant TEST string)
2. Get a CRC of the string and add that to the front of the string.
3. HEX the whole string.
4. Append to URL and connect over HTTP

我坚持2!我应该得到的CRC是1903129755,但在其他结果中,我得到-1903129756。注意:出于本文的目的,我使用的是测试字符串及其生成的CRC。字符串将随着我在构建它时包含时间(以毫秒为单位)而改变。

我应该指出,这是在黑莓上。 android代码完美无缺。该CRC来自Android和在线CRC生成器网站: http://hash.online-convert.com/crc32b-generator

我的代码似乎适用于其他人,所以我在这里显然有问题。有人可以发现我的错误吗?感谢

正如您所看到的,我尝试了几种不同的方式:

    import net.rim.device.api.util.CRC32;

    public long getCrcValue(String inputText)
    {
            int crc1 = 0,crc2=0;
            long crc3=0;

            crc1 = CRC32.update(CRC32.INITIAL_VALUE, inputText.getBytes());
            crc2 = CRC32.update(0, inputText.getBytes());
            String temp = Integer.toBinaryString(crc1);
            crc3 = Long.parseLong(temp,2);
            long crc4 = CRC32.update(CRC32.INITIAL_VALUE, inputText.getBytes());
            long crc5 = CRC32.update(0, inputText.getBytes());


            logger.log("CRC1 is: "+crc1);
            logger.log("CRC2 is: "+crc2);
            logger.log("CRC3 is: "+crc3);
            logger.log("CRC4 is: "+crc4);
            logger.log("CRC5 is: "+crc5);

return crc1;
}

PS logger是我自己的类,用于将自定义格式化输出输出到控制台,因此请忽略它。

编辑:说到输出,这是输出的结果:

CRC1 is: -1903129756
CRC2 is: -460833676
CRC3 is: 2391837540
CRC4 is: -1903129756
CRC5 is: -460833676

EDIT2:这是相当的Android代码。 注意crc定义为CRC32 crc

public long getCrcValue(String inputText)
{
    crc.reset();
    crc.update(inputText.getBytes());
    return crc.getValue();
}

3 个答案:

答案 0 :(得分:1)

这是应该如何:

int crc32 = CRC32.update(CRC32.INITIAL_VALUE, inputText.getBytes()) ^ 0xffffffff;

答案 1 :(得分:1)

FYI, 最后我通过从java.util.zip.CRC32java.util.zip.checksum获取源代码并使用该源在我的blackberry项目中创建新类来解决此问题。由于这与Android使用的实现相同,因此两个应用程序都运行良好!

答案 2 :(得分:0)

String temp = Integer.toBinaryString(crc1);
crc3 = Long.parseLong(temp,2);

关闭主题,但究竟是什么?你想做'长期crc3 = crc1;'最难的方式?