Why are the outputs of the md5sum tool and Crypto++'s MD5 different? Could you please tell me what is the difference of coreutils' md5sum and sha*sum tools (sha1sum, sha224sum, etc.) compared to Crypto++'s digest functions?

I've written a piece of code using Crypto++ hash functions but the result is different from the corresponding Unix tools'.

For example if I write in command line:

 echo test123 | md5sum


I get:

4a251a2ef9bbf4ccc35f97aba2c9cbda


but the Crypto++ MD5 function results with:

cc03e747a6afbbcbf8be7668acfebee5


Similar things happens when I use another digest functions (as mentioned earlier).

Both Unix and Crypto++ manuals says it simply calculates digest, but says nothing about output format. 

I can see both have the same length, both seem to be in hexadecimal form (0-f) and moreover when I type the hashes into Google, in both cases it says that it is an MD5 hash of test123.

Do you have any ideas about it?
The echo command appends a new line at the end, by default. The -n option omits this character. Compare these two executions:

&gt; echo -n "test123" | md5sum
cc03e747a6afbbcbf8be7668acfebee5

&gt; echo "test123" | md5sum
4a251a2ef9bbf4ccc35f97aba2c9cbda


So the difference between the hash values is simply caused by the new line character.