1

几年前,当我还是编程的初学者时,我在网上发现了一些代码,可以在给定偏移量的情况下生成蛮力代码。

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

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

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

4

2 回答 2

2

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

在这种情况下,GetPassword 必须从基数 10 转换为基数 62。您可以使用查找数组来查找输出字符。

您可以使用以下算法将一个碱基转换为另一个碱基:

另一个stackoverflow帖子

于 2013-04-30T14:02:40.400 回答
2

这是base 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;
}
于 2013-04-30T14:26:14.233 回答