我一直坚持这几天,现在似乎无法得到它。我希望通过张贴在这里,我会有一个顿悟,并发布后30秒解决这个问题! :D 这里去...黑莓CRC32问题
我需要加密一个字符串,将它附加到我的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();
}
什么是您使用的等效Android代码? –
出于某种原因,您的输出CRC与您期望值的位反比,所以除非您找到解决方案,否则您可能只是反转输出 – Hasturkun
我很好奇你为什么要调用这个“加密”字符串。 CRC32没有密码强度。即使这样做,将校验和预先加到字符串上,十六进制编码整个事物也没有密码强度。 – Richard