выпуск ежевики CRC32 - PullRequest
       6

выпуск ежевики CRC32

0 голосов
/ 04 июля 2011

Я застрял на этом в течение нескольких дней и, похоже, не могу этого понять. Я надеюсь, что, разместив здесь сообщение, я получу прозрение и исправлю эту проблему через 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 ]

1 голос
/ 14 июля 2011

FYI, В конце концов я исправил это, взяв источник из java.util.zip.CRC32 и java.util.zip.checksum и создав новые классы в своем проекте Blackberry с использованием этого источника. Поскольку это та же самая реализация, которую использует Android, оба приложения работают отлично!

1 голос
/ 04 июля 2011

Вот как это должно быть:

int crc32 = CRC32.update(CRC32.INITIAL_VALUE, inputText.getBytes()) ^ 0xffffffff;
0 голосов
/ 05 июля 2011
String temp = Integer.toBinaryString(crc1);
crc3 = Long.parseLong(temp,2);

Не по теме, но что это такое?Вы пытаетесь сделать 'long crc3 = crc1;'самый сложный способ?

...