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 为种子的随机函数并不是一种非常安全的密码生成方式。如果应用程序停止并重新启动,它将在第二次生成与第一次相同的一组密码。最好不要传递初始化参数,在这种情况下它将使用时间来播种随机数生成器。

如果这些密码将用于重要的事情或全世界都可以访问的事情(或两者兼而有之),那么即使这也不是真正随机的,不足以保证安全。您应该查看像 System.Security.Cryptography.RNGCryptoServiceProvider 这样的加密随机数生成器

于 2011-08-04T01:58:47.370 回答