Module: HashPump

Defined in:
lib/hashpump.rb,
lib/hashpump/version.rb

Overview

HashPumpを用いてHash Length Extension attackを行うための関数を定義したモジュールです

Constant Summary collapse

VERSION =

バージョン

"0.0.1"

Class Method Summary collapse

Class Method Details

.call_hashpumpObject

.hashpump(signature, known_data, append_data, key_length, hex_digest = true) ⇒ Array

HashPumpを用いてハッシュ拡張攻撃を行います。ハッシュ値の種類はハッシュの長さにより自動的に識別されます。

Parameters:

  • signature (String)

    拡張するハッシュ値(デフォルトでは16進数文字列)

  • known_data (String)

    ハッシュされた文字列のうち既知の後半部分

  • append_data (String)

    追加したい文字列

  • key_length (Integer)

    ハッシュされた文字列のうち未知の前半部分の長さ

  • hex_digest (Boolean) (defaults to: true)

    ハッシュ値を16進数文字列として扱うか。デフォルトではtrue。

Returns:

  • (Array)

    最初の要素に拡張後のハッシュ値(16進数文字列), 2番目の要素に追加する文字列を持つ配列を返す



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/hashpump.rb', line 12

def hashpump(signature, known_data, append_data, key_length, hex_digest = true)
  if hex_digest
    signature = signature.unpack("H*")[0] unless /^[A-Fa-f0-9]*$/ =~ signature
  else
    signature = signature.unpack("H*")[0]
  end
  signature, data = call_hashpump([signature.to_s].pack("H*").unpack("C*"), known_data.to_s.unpack("C*"), append_data.to_s.unpack("C*"), key_length)
  signature = signature.pack("C*").unpack("H*")[0]
  data = data.pack("C*")
  signature = [signature].pack("H*") unless hex_digest
  [signature, data]
end