我想生成160个不同的随机用户和密码,现在,当我在用户和密码变量上添加断点(在for循环中)时,代码似乎工作正常。但是当我运行没有断点的代码时,Passwords.csv对所有160行都有相同的输出。任何帮助表示赞赏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace WriteCSVPasswords
{
class Program
{
static void Main(string[] args)
{
string path = @"c:\temp\Passwords.csv";
string user = null;
string password = null;
string[] file = new string[160];
for (int i = 0; i < 160; i++)
{
user = CreatePassword(4);
password = CreatePassword(5);
file[i] = user + ";" + password + ";" + Base64Encode(user + ":" + password);
user = null;
password = null;
}
if (!File.Exists(path))
{
// Create a file to write to.
File.WriteAllLines(path, file, Encoding.UTF8);
}
}
public static string CreatePassword(int length)
{
const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.+-!";
StringBuilder res = new StringBuilder();
Random rnd = new Random();
while (0 < length--)
{
res.Append(valid[rnd.Next(valid.Length)]);
}
return res.ToString();
}
public static string Base64Decode(string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
public static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
}
}
答案 0 :(得分:5)
我怀疑这与断点有什么关系。(Code Gray在使用断点时对时序差异提出了一个很好的观点,所以它与此有关。)
确定Random rnd = new Random();
存在问题,因为您重新创建随机生成器,它会一次又一次地重新开始。
我建议在班级宣布rnd
。