在C#中生成顺序密码

Raz*_*ick 0 c# hash switch-statement

我一直试图在C#(aaaa,aaab,aaac,... abcd,abce)中依次为哈希破解者生成密码(用于白帽).但是,我不知道该怎么做.

现在我有一个char数组,其最后一个元素由一个开关递增:

            switch (character) {
            case ('0'):
                character = '1';
                break;
            case ('1'):
                character = '2';
                break;
            case ('2'):
                character = '3';
                break;
            case ('3'):
                character = '4';
                break;
            case ('4'):
                character = '5';
                break;
            case ('5'):
                character = '6';
                break;
            case ('6'):
                character = '7';
                break;
            case ('7'):
                character = '8';
                break;
            case ('8'):
                character = '9';
                break;
            case ('9'):
                character = 'a';
                break;
            case ('a'):
                character = 'b';
                break;
            case ('b'):
                character = 'c';
                break;
            case ('c'):
                character = 'd';
                break;
            case ('d'):
                character = 'e';
                break;
            case ('e'):
                character = 'f';
                break;
            case ('f'):
                character = 'g';
                break;
            case ('g'):
                character = 'h';
                break;
            case ('h'):
                character = 'i';
                break;
            case ('i'):
                character = 'j';
                break;
            case ('j'):
                character = 'k';
                break;
            case ('k'):
                character = 'l';
                break;
            case ('l'):
                character = 'm';
                break;
            case ('m'):
                character = 'n';
                break;
            case ('n'):
                character = 'o';
                break;
            case ('o'):
                character = 'p';
                break;
            case ('p'):
                character = 'q';
                break;
            case ('q'):
                character = 'r';
                break;
            case ('r'):
                character = 's';
                break;
            case ('s'):
                character = 't';
                break;
            case ('t'):
                character = 'u';
                break;
            case ('u'):
                character = 'v';
                break;
            case ('v'):
                character = 'w';
                break;
            case ('w'):
                character = 'x';
                break;
            case ('x'):
                character = 'y';
                break;
            case ('y'):
                character = 'z';
                break;
            case ('z'):
                character = 'A';
                break;
            case ('A'):
                character = 'B';
                break;
            case ('B'):
                character = 'C';
                break;
            case ('C'):
                character = 'D';
                break;
            case ('D'):
                character = 'E';
                break;
            case ('E'):
                character = 'F';
                break;
            case ('F'):
                character = 'G';
                break;
            case ('G'):
                character = 'H';
                break;
            case ('H'):
                character = 'I';
                break;
            case ('I'):
                character = 'J';
                break;
            case ('J'):
                character = 'K';
                break;
            case ('K'):
                character = 'L';
                break;
            case ('L'):
                character = 'M';
                break;
            case ('M'):
                character = 'N';
                break;
            case ('N'):
                character = 'O';
                break;
            case ('O'):
                character = 'P';
                break;
            case ('P'):
                character = 'Q';
                break;
            case ('Q'):
                character = 'R';
                break;
            case ('R'):
                character = 'S';
                break;
            case ('S'):
                character = 'T';
                break;
            case ('T'):
                character = 'U';
                break;
            case ('U'):
                character = 'V';
                break;
            case ('V'):
                character = 'W';
                break;
            case ('W'):
                character = 'X';
                break;
            case ('X'):
                character = 'Y';
                break;
            case ('Y'):
                character = 'Z';
                break;
            case ('Z'):
                character = '@';
                break;
            case ('@'):
                character = '%';
                break;
            case ('%'):
                character = '/';
                break;
            case ('/'):
                character = '\\';
                break;
            case ('\\'):
                character = '\'';
                break;
            case ('\''):
                character = '!';
                break;
            case ('!'):
                character = '$';
                break;
            case ('$'):
                character = '#';
                break;
            case ('#'):
                character = '^';
                break;
            case ('^'):
                character = '?';
                break;
            case ('?'):
                character = ':';
                break;
            case (':'):
                character = ',';
                break;
            case (','):
                character = '(';
                break;
            case ('('):
                character = ')';
                break;
            case (')'):
                character = '[';
                break;
            case ('['):
                character = ']';
                break;
            case (']'):
                character = '{';
                break;
            case ('{'):
                character = '}';
                break;
            case ('}'):
                character = '-';
                break;
            case ('-'):
                character = '_';
                break;
            case ('_'):
                character = '+';
                break;
            case ('+'):
                character = '=';
                break;
            case ('='):
                character = '0';
                break;
                prev = true;
            default:
                character = '0';
                break;
        }
Run Code Online (Sandbox Code Playgroud)

但是,当该元素再次达到0时,我需要增加密码的前一个数字,如果该数字也达到0,我需要增加该数字的前一个数字,依此类推.

此外,由于这是一个哈希破解者,它需要很快.有什么建议?

Jim*_*hel 6

我的第一个答案不会给你你想要的东西.这将:

创建一个定义字母表的字符串:

const string Alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
Run Code Online (Sandbox Code Playgroud)

然后用所有-1初始化一个int数组,只要你的密码最长.这个最多可以包含8个字符:

int[] pwArray = new int[] {-1, -1, -1, -1, -1, -1, -1, -1};
Run Code Online (Sandbox Code Playgroud)

然后运行一个循环:

for (int i = 0; i < Whatever; ++i)
{
    string password = ToPasswordString(pwArray, Alphabet);
    // do something with the password
}

string ToPasswordString(int[] pass, string alphabet)
{
    for (int i = pass.Length-1; i > 0; --i)
    {
        pass[i]++;
        if (pass[i] < alphabet.Length)
        {
            break;
        }
        pass[i] = 0;
    }
    var sb = new StringBuilder();
    for (int i = 0; i < pass.Length; ++i)
    {
        if (pass[i] >= 0)
            sb.Append(alphabet[pass[i]]);
    }
    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

这里的关键是我们不修改密码字符.相反,我们将索引修改为字符数组.

当然,这不会像其他一些方法(每秒密码)那么快,但是你的程序的速度受限于你被黑客攻击的网站响应登录尝试的速度.与此相比,您生成密码所花费的时间是无关紧要的.


Jar*_*Par 5

而不是一个复杂的,非常大的switch语句,为什么不直接映射intchar.

for (int i = 0; i < (int)Char.MaxValue; i++) { 
  char c = (char)i;
  ...
}
Run Code Online (Sandbox Code Playgroud)

这样可以很容易地构建暴力密码生成器.

  • 如果这是密码破解程序,您可能不想测试不可打印的ASCII.一个更可能的范围(没有进入Unicode)将是`for(int i =(int)''; i <(int)'〜'; i ++)` (2认同)