Search code examples
linuxchecksumcrccrc32

CRC32 differs when executed on file vs text


I have a file called hello.txt with following content:

hello

When I execute a linux crc32 on that file like this: (I installed via sudo apt install libarchive-zip-perl)

crc32 hello.txt

I get:

363a3020

When I want to use some online calculator or npm library (crc from node.js), I execute that on text only and get the following result:

3610a686

Which is different. How could I check this so that the results are the same ? What is the difference here ? Can someone explain ?


Solution

  • It looks as if you created the file by running something like:

    echo hello > hello.txt
    

    The echo command appends a newline character, so the content of that file is actually hello<newline>. We can see that with a hexdump tool, for example:

    $ od --endian=big -x hello.txt
    0000000 6865 6c6c 6f0a
    0000006
    

    Or by just counting bytes:

    $ wc -c hello.txt
    6 hello.txt
    

    Here we see it's 6 bytes instead of the expected 5 bytes. If we suppress the terminal newline:

    echo -n hello > hello.txt
    

    We then get the expected crc:

    $ crc32 hello.txt
    3610a686