我一直堅持這幾天,現在似乎無法得到它。我希望通過張貼在這裏,我會有一個頓悟,併發布後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