C# 如何制作一个写着-&引用;每四个字母用C表示#

C# 如何制作一个写着-&引用;每四个字母用C表示#,c#,string,random,password-protection,key-generator,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(

我有一个简短的问题。我有一个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);
}
Random Random=new Random(0);
私有无效按钮1\u单击(对象发送者,事件参数e)
{
textBox1.Text=getrandomcode();
}
公共字符串getrandomcode()
{
char[]标记={'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[]code数组=新字符[24];
对于(int i=0;i<24;i++)
{
int index=random.Next(tokens.Length-1);
codeArray[i]=令牌[index];
}
返回新字符串(codeArray);
}
它简单到不复杂,所以我希望有一种方法来实现代码中的“-”


提前谢谢

将其包含在“for”循环中:

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

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];
    }
}
for(int i=0;i<24;i++)
{
如果(i%5==4){
代码数组[i]='-';
}否则{
int index=random.Next(tokens.Length-1);
codeArray[i]=令牌[index];
}
}
如果希望密码包含24个非破折号字符,请将24改为29

但是我还要告诉你,使用一个种子为0的随机函数来生成密码不是一种非常安全的方法。如果应用程序停止并重新启动,它将在第二次生成与第一次相同的密码集。最好不要传递初始化参数,在这种情况下,它将使用时间为随机数生成器种子


如果这些密码将被用于一些重要的或全世界都可以访问(或两者都可以)的事情,那么即使是这些密码也不是真正随机的,不足以保证安全。您应该查看诸如System.Security.Cryptography.RNGCryptoServiceProvider之类的加密随机数生成器,或者如果您想使用正则表达式,请尝试以下操作:

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

如果您希望密钥生成器是真正(伪)随机的,请不要为
random
使用种子-现在您每次启动应用程序时都会生成相同的序列为什么&&i>0?这真的没什么用,因为我从来都不是负数,当我=0时,我的mod 5就不等于4。这只是一个简单的项目,我正在做,应该没问题,谢谢。