String::CRC crc function returns incorrect result, why?

Discussion in 'Perl Misc' started by `Zidane Tribal, Jul 26, 2007.

  1. it would appear that using the command 'crc("data")' from the String::CRC
    returns incorrect results (although, they are at least consistently
    incorrect).

    for example, this script.....

    #!/usr/bin/perl -w
    use strict;
    use String::CRC;
    print "crc: " . crc($ARGV[0]) . " " . length($ARGV[0]) . "\n";

    produces this output:

    zidane@bluemist:~/ps2/dev/crccheck$ ./crctest.pl 12345
    crc: 3817467633 5
    zidane@bluemist:~/ps2/dev/crccheck$

    whereas this command:

    zidane@bluemist:~/ps2/dev/crccheck$ echo -n "12345" | cksum
    3288622155 5
    zidane@bluemist:~/ps2/dev/crccheck$

    produces a different crc value.

    this is also true using String::CRC32, DIGEST::CRC and DIGEST::CRC32 (using
    the command line commands cksum and crc32 to create respective crc and
    crc32 values to test against)

    my query is simple.... why is this? although the values are different,
    they are consistently different (i.e. the same result returned with each
    call given the same data). can anyone explain what i am doing wrong?

    `Zidane.
    --
    You dont need a reason to help people. `Zidane Tribal.
    `Zidane Tribal, Jul 26, 2007
    #1
    1. Advertising

  2. `Zidane Tribal

    Sisyphus Guest

    "`Zidane Tribal" <0m> wrote in message
    news:KR8qi.137295$...
    ..
    ..
    > for example, this script.....
    >
    > #!/usr/bin/perl -w
    > use strict;
    > use String::CRC;
    > print "crc: " . crc($ARGV[0]) . " " . length($ARGV[0]) . "\n";
    >
    > produces this output:
    >
    > zidane@bluemist:~/ps2/dev/crccheck$ ./crctest.pl 12345
    > crc: 3817467633 5
    > zidane@bluemist:~/ps2/dev/crccheck$
    >
    > whereas this command:
    >
    > zidane@bluemist:~/ps2/dev/crccheck$ echo -n "12345" | cksum
    > 3288622155 5
    > zidane@bluemist:~/ps2/dev/crccheck$
    >

    ..
    ..
    > can anyone explain what i am doing wrong?


    I don't think you're doing anything wrong - they are apparently using
    different algorithms.

    String::CRC::Cksum ( http://search.cpan.org/~ahamm/String-CRC-Cksum-0.03/ )
    claims to be compatible with the POSIX cksum program.

    Cheers,
    Rob
    Sisyphus, Jul 27, 2007
    #2
    1. Advertising

  3. Sisyphus wrote:

    >
    > "`Zidane Tribal" <0m> wrote in message
    > news:KR8qi.137295$...
    > .
    > .
    >> for example, this script.....
    >>
    >> #!/usr/bin/perl -w
    >> use strict;
    >> use String::CRC;
    >> print "crc: " . crc($ARGV[0]) . " " . length($ARGV[0]) . "\n";
    >>
    >> produces this output:
    >>
    >> zidane@bluemist:~/ps2/dev/crccheck$ ./crctest.pl 12345
    >> crc: 3817467633 5
    >> zidane@bluemist:~/ps2/dev/crccheck$
    >>
    >> whereas this command:
    >>
    >> zidane@bluemist:~/ps2/dev/crccheck$ echo -n "12345" | cksum
    >> 3288622155 5
    >> zidane@bluemist:~/ps2/dev/crccheck$
    >>

    > .
    > .
    >> can anyone explain what i am doing wrong?

    >
    > I don't think you're doing anything wrong - they are apparently using
    > different algorithms.
    >
    > String::CRC::Cksum ( http://search.cpan.org/~ahamm/String-CRC-Cksum-0.03/
    > ) claims to be compatible with the POSIX cksum program.
    >
    > Cheers,
    > Rob


    but that then begs the question...... which is the *right* algorithm....
    is there one standardised algorithm?

    Thanks,
    `Zidane.




    --
    You dont need a reason to help people. `Zidane Tribal.
    `Zidane Tribal, Jul 27, 2007
    #3
  4. `Zidane Tribal

    Sisyphus Guest

    "`Zidane Tribal" <0m> wrote in message
    news:zYjqi.84065$...
    ..
    ..
    >
    > but that then begs the question...... which is the *right* algorithm....
    > is there one standardised algorithm?
    >


    The *right* algorithm is the one that best suits your purposes.
    If you want a perl module that's going to produce the same values as 'cksum'
    then it looks like you need String::CRC::Cksum.
    But if you don't need something that matches 'cksum' you could use any one
    of the other modules - or even something like Digest::MD5 (which is a core
    module) or Digest::SHA.

    Cheers,
    Rob
    Sisyphus, Jul 27, 2007
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mr. SweatyFinger
    Replies:
    2
    Views:
    1,747
    Smokey Grindel
    Dec 2, 2006
  2. Mamut

    crc-8 and crc-16 code...

    Mamut, Feb 21, 2007, in forum: C++
    Replies:
    5
    Views:
    4,015
    Victor Bazarov
    Feb 22, 2007
  3. `Zidane Tribal
    Replies:
    1
    Views:
    2,500
    Joe Smith
    Jul 28, 2007
  4. Rastio Hodul

    Do I need CRC check on web service which returns byte array?

    Rastio Hodul, May 22, 2004, in forum: ASP .Net Web Services
    Replies:
    1
    Views:
    237
    AlexS
    May 22, 2004
  5. Michael Tan
    Replies:
    32
    Views:
    930
    Ara.T.Howard
    Jul 21, 2005
Loading...

Share This Page