Brute Force算法,即暴力算法,是普通的模式匹配算法,Brute Force算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。Brute Force算法是一种蛮力算法。


 1 public delegate bool BruteForceCallback(ref char[] testChars);
 2 
 3         public static bool BruteForce(string testChars, int startLength, int endLength, BruteForceCallback bruteForceCallback)
 4         {
 5             for (int len = startLength; len <= endLength; ++len)
 6             {
 7                 char[] chars = new char[len];
 8 
 9                 for (int i = 0; i < len; ++i)
10                     chars[i] = testChars[0];
11 
12                 if (bruteForceCallback(ref chars))
13                     return true;
14 
15                 for (int i1 = len - 1; i1 > -1; --i1)
16                 {
17                     int i2 = 0;
18 
19                     for (i2 = testChars.IndexOf(chars[i1]) + 1; i2 < testChars.Length; ++i2)
20                     {
21                         chars[i1] = testChars[i2];
22 
23                         if (bruteForceCallback(ref chars))
24                             return true;
25 
26                         for (int i3 = i1 + 1; i3 < len; ++i3)
27                         {
28                             if (chars[i3] != testChars[testChars.Length - 1])
29                             {
30                                 i1 = len;
31                                 goto outerBreak;
32                             }
33                         }
34                     }
35 
36                 outerBreak:
37                     if (i2 == testChars.Length)
38                         chars[i1] = testChars[0];
39                 }
40             }
41 
42             return false;
43         }


使用举例:

 1             string dict = "abcde12345";
 2             string password = "a1b2c3d4";
 3 
 4 
 5             BruteForceCallback bruteForceCallback = delegate (ref char[] testChars)
 6             {
 7                 var str = new string(testChars);
 8                 return (str == password);
 9             };
10 
11 
12             bool result = BruteForce(dict, 1, password.Length, bruteForceCallback);


输出结果:

	true