2012-12-30 150 views
0

我有一個蠻力算法,但從來沒有完全理解它。我對某些事情有一種模糊的把握,但每次我嘗試關注發生的事情時,我都會迷路(例如,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); 
    } 
} 
+2

蠻力不是具體算法的名稱。你應該說明你使用這種算法的用途。 – Headshota

+0

@Headshota其實,它是。蠻力是枚舉所有有效密碼並逐一嘗試它們的算法。 –

+3

這是一段簡單的Java代碼。如果你不明白,我建議你先購買一本好的Java編程教科書。如果你有一個具體的問題,也許我們可以回答。但是「請解釋這個」並不具有建設性...... –

回答

6

​​是一種啓發式技術,這意味着,從本質上講,你要嘗試採取的計算機快了多少比人腦的優勢,分析每一個可能的場景。例如,你不是試圖在棋盤遊戲中演繹出密碼或下一個最佳棋步;你只是測試每種可能的情況,並使用正確的(或者根據某種度量標準來選擇最好的一種,具體取決於蠻力算法的意圖)。

您的代碼只是通過可能爲密碼持有的所有可能值並檢查是否已找到它。如果沒有,它會轉到下一個可能的組合,直到它結束。

這也是一個worst-case scenario的示範,因爲密碼,被定義爲ZZZZZ,將以算法嘗試作爲溶液的最後一件事(假設最大密碼長度被定義爲五個字符。)

另外,就你擔心人們認爲你將這種算法用於惡意目的而言,我不會太在意。幾乎沒有任何計算機系統實際上容易受到這種攻擊,並且在實際發生密碼之前,您將被鎖定很久。