1

数年前、私がまだプログラミングの初心者だった頃、オフセットを指定してブルートフォース コードを生成できるコードをオンラインで見つけました。

たとえば、実行すると「a」が返されGetPassword(1)、実行GetPassword(2)すると「b」などが返されます。

オフセットをインクリメントするたびに、次の可能な文字列の組み合わせが提供されます。「推測するパスワード」の最小長と最大長も指定できます。

このコードがどこにあるのか、またはアルゴリズムが何と呼ばれているのかわかりません。URL短縮の目的で必要なので、自分で実装したいと思います。ユーザーが生成する URL は、次の行をやや長く表示したいものです: http://fablelane.com/i/abcここで、"abc" はコードです。

4

2 に答える 2

2

GetPassword からの出力は、基数が異なる数値と考えることができます。たとえば、GetPassword が大文字と小文字の英数字を出力できる場合、base 62 になります -> 26 文字 + 26 文字 + 10 桁。

この場合、GetPassword は base 10 から base 62 に変換する必要があります。ルックアップ配列を使用して、出力文字を見つけることができます。

次のようなアルゴリズムを使用して、ある塩基から別の塩基に変換できます。

別のスタックオーバーフローの投稿

于 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 に答える