4

簡単な質問があります。アプリのランダムパスワードを生成するkeygenがあります。大文字と数字を生成しますが、コードをこのようにフォーマットする一部のプログラムのようにしたいと思いますxxxx-xxxx-xxxx。これまでのところ私のコードはこれです

Random random = new Random(0);

private void button1_Click(object sender, EventArgs e)
{
    textBox1.Text = getrandomcode();
}

public string getrandomcode()
{
    char[] tokens = {'0', '1', '2', '3', '4', '5', '7', '8', '9', 'A', 'B', 'C', 
        'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
        'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};

    char[] codeArray = new char[24];

    for (int i = 0; i < 24; i++)
    {
        int index = random.Next(tokens.Length - 1);
        codeArray[i] = tokens[index];
    }

    return new String(codeArray);
}

複雑ではなく単純なものなので、このコードに「-」を実装する方法があることを願っています。

前もって感謝します!

4

3 に答える 3

6

これを'for'ループに含めます:

if (i % 5 == 4)
{
  codeArray[i] = '-';
} 
else 
{
    int index = random.Next(tokens.Length - 1);
    codeArray[i] = tokens[index];
}
于 2011-08-04T01:55:31.983 に答える
3

または、正規表現を使用する場合は、次のことを試してください。

textBox1.Text = Regex.Replace(getrandomcode(), @"(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})", "$1-$2-$3-$4-$5")
于 2011-08-04T02:07:13.440 に答える
0

これを試して:

for (int i = 0; i < 24; i++)
{
    if (i % 5 == 4) {
        codeArray[i] = '-';
    } else {
        int index = random.Next(tokens.Length - 1);
        codeArray[i] = tokens[index];
    }
}

パスワードにダッシュ以外の文字を24文字含める場合は、24を29に変更します。

ただし、0をシードしたランダム関数を使用することは、パスワードを生成するための非常に安全な方法ではないこともお伝えする必要があります。アプリケーションを停止して再起動すると、2回目は1回目と同じパスワードのセットが生成されます。初期化引数を渡さないことをお勧めします。その場合、時間を使用して乱数ジェネレーターをシードします。

これらのパスワードが重要なものや全世界がアクセスできるもの(またはその両方)に使用される場合、これでさえ安全であるほどランダムではありません。System.Security.Cryptography.RNGCryptoServiceProviderのような暗号化乱数ジェネレーターを確認する必要があります

于 2011-08-04T01:58:47.370 に答える