给定偏移量生成强力字符串?

时间:2013-04-30 13:58:00

标签: c# brute-force url-shortener

几年前,当我还是编程的初学者时,我发现一些在线代码可以生成一个带有偏移的暴力代码。

例如,如果我做GetPassword(1)它将返回“a”,如果我做GetPassword(2)它将返回“b”等。

偏移的每个增量都将提供下一个可能的字符串组合。还可以提供“要猜测的密码”的最小和最大长度。

现在我不知道这个代码在哪里,或者调用了什么算法。我想自己实现一个,因为我需要它用于URL-enshortening目的。用户生成一个我希望看起来有点长的URL:http://fablelane.com/i/abc其中“abc”是代码。

2 个答案:

答案 0 :(得分:2)

您可以将GetPassword的输出视为不同基础中的数字。例如,如果GetPassword可以输出大写和小写字母数字,那么它在基数62 - > 26个字母+ 26个字母+10个数字。

在这种情况下,

GetPassword必须从基数10转换为基数62。您可以使用查找数组来查找输出字符。

您可以使用以下算法从一个基地转换为另一个基础:

Another stackoverflow post

答案 1 :(得分:2)

这是基础26编码结束解码:

public static string Encode(int number){
    number = Math.Abs(number);
    StringBuilder converted = new StringBuilder();
    // Repeatedly divide the number by 26 and convert the
    // remainder into the appropriate letter.
    do
    {
        int remainder = number % 26;
        converted.Insert(0, (char)(remainder + 'a'));
        number = (number - remainder) / 26;
    } while (number > 0);

    return converted.ToString();
}

public static int Decode(string number) {
    if (number == null) throw new ArgumentNullException("number");
    int s = 0;
    for (int i = 0; i < number.Length; i++) {
        s += (number[i] - 'a');
        s = i == number.Length - 1 ? s : s * 26;
    }
    return s;
}