わたなべです.

Masatoshi SEKI <m_seki / mva.biglobe.ne.jp> writes:

:UNIX Magazine 1999年11月号の「インターフェイスの街角」に
:出ていたsignature法のRubyモジュールを作ってみました。

わたしもこれを読んで面白そうだなと思っていろいろ実験してました.
でもある程度ファイルが大きくなると signature が全ビット 1 に
なり使いものにならないんですよね.
3 バイトでってのはちょっと手を抜きすぎかも.
ていうかそこを工夫してもやっぱ数KBぐらいが限界という気も.

#!/usr/local/bin/ruby

module SigMethod
  def SigMethod.calc s
    len = s.length - 3
    len = 0 if len < 0
    sig = 0
    for i in 0..len
      sig |= (1 << s[i, 3].hash % 1024)
    end
    sig
  end
  def SigMethod.match(text, pat)
#    printf "%x\n", text & pat
#    printf "%x\n", pat
    (text & pat) == pat
  end
end

text = SigMethod.calc("hogeほげfoo")
pat = SigMethod.calc("ほげ")
p SigMethod.match(text, pat)

-- 
わたなべひろふみ