添加断点时,C#程序在文件中生成相同的输出

时间:2017-06-14 12:14:44

标签: c#

我想生成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);
        }
    }
}

1 个答案:

答案 0 :(得分:5)

我怀疑这与断点有什么关系。(Code Gray在使用断点时对时序差异提出了一个很好的观点,所以它与此有关。)

确定Random rnd = new Random();存在问题,因为您重新创建随机生成器,它会一次又一次地重新开始。

我建议在班级宣布rnd