[解決済み] ブルートフォースアルゴリズムの説明 [終了しました]。
質問内容
ブルートフォースアルゴリズムを持っているが、完全に理解したことがない。 いくつかのことは漠然と把握しているのですが、何が起こっているのかを正確に追おうとすると、毎回迷ってしまいます(例えば
index
変数が少しわかりにくいです)。 アルゴリズムをより効率的にする方法についての提案も歓迎します。
備考 - アルゴリズムは既に持っていて、コンパイルして動作します。 悪意を持ってこれを使おうとしていると非難しないでください。そのような目的で使ったことはありませんし、そのつもりもありません。 私はただ、どのように動作するのか知りたいだけなのです。
public class BruteForceTest
{
public String username = new String();
public static String password = "ZZZZZ";
public static char[] charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static char[] currentGuess = new char[1];
public static void bruteForce()
{
String attempt = new String();
Date start = new Date();
while (true)
{
if (attempt.equals(password))
{
Date end = new Date();
System.out.println("Password: " + attempt + "\nTotal time to crack: " + ((end.getTime() - start.getTime()) / 1000) + " seconds." + "\n");
break;
}
attempt = in.toString();
// System.out.println("Tried: " + attempt);
in.increment();
}
}
public BruteForceTest()
{
Arrays.fill(currentGuess, charset[0]);
}
public void increment()
{
int index = currentGuess.length - 1;
while (index >= 0)
{
if (currentGuess[index] == charset[charset.length - 1])
{
if (index == 0)
{
currentGuess = new char[currentGuess.length + 1];
Arrays.fill(currentGuess, charset[0]);
break;
}
else
{
currentGuess[index] = charset[0];
index--;
}
}
else
{
currentGuess[index] = charset[Arrays.binarySearch(charset, currentGuess[index]) + 1];
break;
}
}
}
public String toString()
{
return String.valueOf(currentGuess);
}
}
解決方法は?
ブルートフォース というのは、基本的に、コンピュータが人間の脳よりも速いことを利用して、あらゆる可能なシナリオを分析しようとするヒューリスティックな手法のことです。 例えば、チェスのゲームでパスワードや次の最善手を演繹的に解明しようとするのではなく、あらゆる可能な状況をテストして、正しいもの(あるいはブルートフォース・アルゴリズムの目的によっては、何らかの指標に基づく最善のもの)を使用するだけなのです。
コードは単純に、パスワードとして考えられるすべての値を調べ、それを見つけたかどうかをチェックします。 見つからなければ、見つかるまでの間、次の可能な組み合わせに進みます。
のデモでもある。
ワーストケースシナリオ
と定義されているため、パスワードは
ZZZZZ
は、アルゴリズムが解決策として試みる最後のものになります(パスワードの最大長は5文字と定義されていると仮定します)。
また、このアルゴリズムを悪意ある目的で使っていると思われることを心配されているようですが、私はあまり心配はしていません。 この種の攻撃に対して脆弱なコンピュータ・システムはほとんどなく、実際にパスワードが見つかるよりずっと前にロックアウトされてしまうからです。
関連
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] nからk個の要素の組み合わせをすべて返すアルゴリズム
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み】CreateProcess error=2, The system cannot find file specified.