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で試したら所分かったと言う.
日頃コマンドラインでほげほげやってるときは改行とか気にしないからかなり嵌った(というかFreeBSDのmd5とDebianのmd5sumの実装が違ったのが泣ける;;).