C#

실생활에 유용한 C# 비밀번호 생성기 만들기

로기221 2025. 5. 13. 10:25
728x90
반응형

 

실생활에 유용한 C# 비밀번호 생성기 만들기

이 예제에서는 사용자가 원하는 길이와 옵션(대문자, 소문자, 숫자, 특수문자 포함 여부)을 선택해 강력한 랜덤 비밀번호를 생성하는 콘솔 프로그램을 만들어봅니다.

주요 기능

  • 비밀번호 길이 입력
  • 대문자, 소문자, 숫자, 특수문자 포함 여부 선택
  • 선택한 옵션에 따라 문자 집합 구성
  • 랜덤하게 비밀번호 생성
using System;
using System.Text;
using System.Security.Cryptography;

class Program
{
    static void Main()
    {
        Console.WriteLine("비밀번호 생성기");
        Console.Write("비밀번호 길이 입력: ");
        int length = int.Parse(Console.ReadLine());

        Console.Write("대문자 포함? (y/n): ");
        bool useUpper = Console.ReadLine().ToLower() == "y";

        Console.Write("소문자 포함? (y/n): ");
        bool useLower = Console.ReadLine().ToLower() == "y";

        Console.Write("숫자 포함? (y/n): ");
        bool useDigit = Console.ReadLine().ToLower() == "y";

        Console.Write("특수문자 포함? (y/n): ");
        bool useSpecial = Console.ReadLine().ToLower() == "y";

        string password = GeneratePassword(length, useUpper, useLower, useDigit, useSpecial);
        Console.WriteLine($"생성된 비밀번호: {password}");
    }

    static string GeneratePassword(int length, bool useUpper, bool useLower, bool useDigit, bool useSpecial)
    {
        const string UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        const string LOWER = "abcdefghijklmnopqrstuvwxyz";
        const string DIGIT = "0123456789";
        const string SPECIAL = "!@#$%^&*()-_=+[]{};:'\",./?`~";

        StringBuilder charPool = new StringBuilder();
        if (useUpper) charPool.Append(UPPER);
        if (useLower) charPool.Append(LOWER);
        if (useDigit) charPool.Append(DIGIT);
        if (useSpecial) charPool.Append(SPECIAL);

        if (charPool.Length == 0)
            throw new ArgumentException("최소 한 가지 옵션은 선택해야 합니다.");

        StringBuilder password = new StringBuilder();
        using (var rng = new RNGCryptoServiceProvider())
        {
            byte[] buffer = new byte[4];
            for (int i = 0; i < length; i++)
            {
                rng.GetBytes(buffer);
                int idx = BitConverter.ToInt32(buffer, 0) & int.MaxValue;
                idx %= charPool.Length;
                password.Append(charPool[idx]);
            }
        }
        return password.ToString();
    }
}

 

코드 설명

  • RNGCryptoServiceProvider를 사용해 보안적으로 안전한 랜덤값을 생성합니다.
  • 옵션에 따라 문자 집합을 구성하고, 그 중에서 무작위로 문자를 뽑아 비밀번호를 만듭니다.
  • 최소 한 가지 옵션은 무조건 선택해야 하도록 예외 처리도 포함했습니다.

확장 아이디어

  • 각 옵션(대문자, 소문자, 숫자, 특수문자)이 반드시 한 글자 이상 포함되도록 보장하는 기능 추가
  • 여러 개의 비밀번호를 한 번에 생성하는 기능
  • GUI(윈도우 폼, WPF)로 확장

마무리

이렇게 C#을 활용해 실생활에 꼭 필요한 비밀번호 생성기를 만들어보았습니다.
간단한 콘솔 프로그램이지만, 보안적으로 안전한 랜덤값을 사용해 강력한 비밀번호를 손쉽게 만들 수 있다는 점이 큰 장점입니다.

 

여러분도 직접 코드를 실행해 보며 옵션을 바꿔보고, 자신만의 기능을 추가해보세요.
프로그래밍 실력도 키우고, 실생활에도 바로 활용할 수 있는 유용한 프로젝트가 될 것입니다.

 

궁금한 점이나 더 알고 싶은 내용, 혹은 추가로 다뤄줬으면 하는 기능이 있다면
언제든 댓글이나 문의로 남겨주세요!
함께 성장하는 개발자가 되길 응원합니다 ~~~ㅎㅎㅎ

728x90
반응형