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