几年前,当我还是编程的初学者时,我发现一些在线代码可以生成一个带有偏移的暴力代码。
例如,如果我做GetPassword(1)
它将返回“a”,如果我做GetPassword(2)
它将返回“b”等。
偏移的每个增量都将提供下一个可能的字符串组合。还可以提供“要猜测的密码”的最小和最大长度。
现在我不知道这个代码在哪里,或者调用了什么算法。我想自己实现一个,因为我需要它用于URL-enshortening目的。用户生成一个我希望看起来有点长的URL:http://fablelane.com/i/abc其中“abc”是代码。
答案 0 :(得分:2)
您可以将GetPassword的输出视为不同基础中的数字。例如,如果GetPassword可以输出大写和小写字母数字,那么它在基数62 - > 26个字母+ 26个字母+10个数字。
在这种情况下,GetPassword必须从基数10转换为基数62。您可以使用查找数组来查找输出字符。
您可以使用以下算法从一个基地转换为另一个基础:
答案 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;
}