MD5とlinuxのmd5sumコマンドの結果が一致しない

openssl の MD5 のテストプログラム

/**
 * md5_test.cpp
 */

#include <openssl/md5.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
        const char* contentName = argv[1];
        unsigned char digest[MD5_DIGEST_LENGTH];
        if( MD5((const unsigned char*)contentName, strlen(contentName), digest) ){
                for(int i = 0; i < MD5_DIGEST_LENGTH; ++i){
                        printf("%02x", ((int)digest[i]));
                }
                printf("\n");
        }
        
        return 0;
}

$ g++ md5_test.cpp -lssl
$ ./a.out a
0cc175b9c0f1b6a831c399e269772661
$ echo "a" | md5sum
60b725f10c9c85c70d97880dfe8191b3 -

むむ? 一致しない。もしや、aの後に改行が入っている?といいうわけで、

bh@ubuntu:~/test$ ./a.out "a
> "
60b725f10c9c85c70d97880dfe8191b3

おお!一致しました。echo は自動で改行を入れるみたいです。改行を入れないようにするには、-n オプションを追加します。

$ echo -n "a" | md5sum
0cc175b9c0f1b6a831c399e269772661 -
$ echo -n "a" | openssl md5
0cc175b9c0f1b6a831c399e269772661