MD5で嵌った

MD5のデータを扱う必要が出てきたので,ほげほげしていたのだけど改行の存在を忘れていて嵌った.

% md5 -s foo
MD5 ("foo") = acbd18db4cc2f85cedef654fccc4a4d8
% echo foo | md5
d3b07384d113edec49eaa6238ad5ff00
$ md5sum
foo
d3b07384d113edec49eaa6238ad5ff00  -
$ echo foo | md5sum
d3b07384d113edec49eaa6238ad5ff00  -
Digest::MD5.new.update('foo').hexdigest 
# => "acbd18db4cc2f85cedef654fccc4a4d8"
md5("foo");
// => "acbd18db4cc2f85cedef654fccc4a4d8"

ということで,計算の値が微妙に違っていた.最初改行を疑っていたのだけど,試したのがPHPなのが行けなかった.PHPだと文字列の最後に改行を足して"foo\n"とやっても,見事に除去してからMD5を適用してくれるという.その後Twitterでアドバイスを貰いつつ色々あーだこーだとやり,Rubyで試したら所分かったと言う.
日頃コマンドラインでほげほげやってるときは改行とか気にしないからかなり嵌った(というかFreeBSDmd5Debianのmd5sumの実装が違ったのが泣ける;;).