如何使一个keygen在C#中每隔四个字母写“ - ”

时间:2011-08-04 01:46:00

标签: c# string random password-protection key-generator

我有一个简单的问题。我有一个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);
}

它简单易懂,所以我希望有一种方法可以实现这个代码的“ - ”。

提前感谢!

3 个答案:

答案 0 :(得分:6)

在“for”循环中包含此内容:

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

答案 1 :(得分:3)

或者如果你想使用正则表达式,试试这个:

textBox1.Text = Regex.Replace(getrandomcode(), @"(\w{4})(\w{4})(\w{4})(\w{4})(\w{4})", "$1-$2-$3-$4-$5")

答案 2 :(得分: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