暴力破解算法(Brute Force)

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

 

posted @   古道轻风  阅读(4019)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2009-03-09 Javascript取select的选中值和文本
2009-03-09 FreeNAS系统基本安装篇
点击右上角即可分享
微信分享提示