0
0

要件が細かいパスワードの生成

Last updated at Posted at 2024-05-20

パスワードを生成するにあたり、以下のルールで作ってみました。

・重複したパスワードは生成禁止
・英大文字、英子文字、数字を必ず1文字使う。
・使いたくない文字は指定可能 ※下記例では数字の0を使わない
・生成件数、パスワード長は指定可能

基本的には★印のところを修正していただければOKです。

Program.cs
// ・数字、小文字、大文字をランダムな位置に挿入
// ・使える文字種類は変数に指定(★印参照)
// ・生成する件数、パスワード長さ、ファイルは定数で指定(★印参照)

using System.Text;

// 使える文字種類を指定
var numbers = "123456789";  // 数字★
var lowerCaseLetters = "abcdefghijklmnopqrstuvwxyz";    // 小文字★
var upperCaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";    // 大文字★


//生成する件数★
const int CountToGeneratePassword = 400000; 

//パスワードを生成する長さを定数で表現★
const int PasswordLength = 10;

//書き込み先★
const string WriteFileFullPath = @"c:\output\passwords.txt";

//----------------ここからロジック------------------------

var random = new Random();

//ファイルストリームの生成
using var fs = new FileStream(WriteFileFullPath, FileMode.Create, FileAccess.Write);

//重複確認用に、HashSetを生成
var hashSet = new HashSet<string>();



// 指定件数の文字列を生成する
for (int i = 0; i < CountToGeneratePassword; i++)
{
    var result = new StringBuilder();
    // 長さPasswordLengthのランダムな文字列を生成

    for (int j = 0; j < PasswordLength; j++)
    {
        var allChars = numbers + lowerCaseLetters + upperCaseLetters;
        result.Append(allChars[random.Next(allChars.Length)]);
    }


    // 数字、小文字、大文字をランダムな位置に挿入
    var randomNumbers = new List<int>();
    while (randomNumbers.Count < 3)
    {
        var number = random.Next(10);
        if (!randomNumbers.Contains(number))
        {
            randomNumbers.Add(number);
        }
    }
    result[randomNumbers[0]] = numbers[random.Next(numbers.Length)];
    result[randomNumbers[1]] = lowerCaseLetters[random.Next(lowerCaseLetters.Length)];
    result[randomNumbers[2]] = upperCaseLetters[random.Next(upperCaseLetters.Length)];

    // 生成した文字列が重複していないか確認
    if (hashSet.Contains(result.ToString()))
    {
        i--;
        continue;
    }

    // 重複していない場合は、HashSetに追加
    hashSet.Add(result.ToString());

    // ファイルに書き込み
    fs.Write(Encoding.UTF8.GetBytes(result.ToString() + "\n"));
}




0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0