Featured image of post Perlの総当たりパスワードクラッカーを、for文から再帰、Mooのクラスへ作り替えてIteratorにたどり着く全5回【目次】

Perlの総当たりパスワードクラッカーを、for文から再帰、Mooのクラスへ作り替えてIteratorにたどり着く全5回【目次】

パスワードの総当たりを3重のfor文で書くところから始め、桁数の増加で再帰に行き詰まり、next メソッドを持つ Moo クラスに閉じ込めて Iterator パターンにたどり着くまでの全5回の目次です。第1回から順に読む連載で、どの回で何が変わるかを一覧できます。

Featured image of post 8桁1億通りを配列に入れるとメモリが尽きる。このシリーズで作ったものはIteratorパターンだった【遅延評価】

8桁1億通りを配列に入れるとメモリが尽きる。このシリーズで作ったものはIteratorパターンだった【遅延評価】

シリーズで作った next メソッドを持つクラスに、GoF の Iterator パターンと名前を付けて振り返ります。1億通りを配列に展開せず、いま試す1つだけをメモリに置く遅延評価の利点と、Perl の <$fh> も同じ仕組みであること、CPAN の Iterator 系モジュールを紹介します。

Featured image of post 総当たりに辞書攻撃も足したいが、ツール本体は書き換えたくない。next を持つクラスを差し替える【ポリモーフィズム】

総当たりに辞書攻撃も足したいが、ツール本体は書き換えたくない。next を持つクラスを差し替える【ポリモーフィズム】

よく使われるパスワードのリストを1行ずつ返す DictionaryIterator を作り、BruteForceIterator と同じ next メソッドを持たせます。コマンドラインの --mode で切り替えても、試行する while ループは1行も変わりません。ポリモーフィズムで攻撃手法を差し替える形を確かめます。

Featured image of post 総当たりの再帰が読みにくく、止めて再開もできない。次の候補を返す next メソッドのクラスにする【Iterator】

総当たりの再帰が読みにくく、止めて再開もできない。次の候補を返す next メソッドのクラスにする【Iterator】

再帰とループの複雑さを BruteForceIterator という Moo クラスに閉じ込め、next を呼ぶたびに次のパスワード候補を1つ返す形に直します。使う側は while で next を呼ぶだけになり、現在の数値を覚えて0埋めするだけの実装で、何桁でも同じ書き方で回せます。

Featured image of post パスワードが4桁、5桁、N桁と増えて、for文のネストを書き足せない。再帰で書いても残る問題【再帰】

パスワードが4桁、5桁、N桁と増えて、for文のネストを書き足せない。再帰で書いても残る問題【再帰】

桁数が増えるたびに for 文を書き足す方式は、桁数を実行時に決められません。再帰呼び出しの brute_force 関数で何桁でも総当たりできる形にしますが、理解しにくい、途中で止めて再開できない、組み合わせの生成と試行が1つの関数に混ざる、という3つの困りごとが残ります。

Featured image of post ゲームオーバーで最初からやり直しになるPerlのRPGに、Mooでセーブ機能を足してMementoパターンにたどり着く全10回【目次】

ゲームオーバーで最初からやり直しになるPerlのRPGに、Mooでセーブ機能を足してMementoパターンにたどり着く全10回【目次】

Perl と Moo で、HP・所持金・位置を持つ Player のRPGを作り、ゲームオーバーで最初からやり直しになる困りごとを、スナップショット・復元・複数スロット・オートセーブで解決して、最後に Memento パターンと名前を付ける全10回の連載の目次です。どこから読むか、困りごとからも選べます。