OpenSSLでMD5のハッシュ値を求める、という時に間違えないように
たまたま、久しぶりに最新のOpenSSLを触っていて、モヤモヤすることがあって気が付いた。
タイトルの通りで、OpenSSLでMD5のハッシュ値を求めたかったのだけど、ググって出てくるページの通りにやっていたら「あれ?」となることがあった。
久しぶりなので最初はコマンドを知りたかったので気が付かなかったけど、求めたハッシュ値でエラーになるので気が付いたというわけ。
注意しないといけないのは、OpenSSLで「hogehogeareare」のMD5のハッシュ値を求めるときは…とかいうページで
echo "hogehogeareare" | openssl md5
と書いてあることが多いが、これで求められるハッシュ値は「改行が含まれたハッシュ値」であるということ。
これは正確にいうとウソである。
OpenSSLのページに書いてある参考ソースもわざわざ最後に「\n」があるのは、間違える輩が多いからだろう。
https://www.openssl.org/docs/manmaster/man3/EVP_get_digestbyname.html
OpenSSLで「hogehogeareare」のMD5のハッシュ値を求めるなら、
echo -n "hogehogeareare" | openssl md5
と、改行コードをつけないで求めるのが正解。
こうしないと、OpenSSLの参考ソースで実際に求めるハッシュ値と異なるものが出てくる。
上記のようにechoを使っているにもかかわらず「-n」(改行無し)を付けていない解説ページが山ほど出てくるが…他人事だけど、大丈夫だったんだろうか?