패스워드 생성 클래스

인터넷 이용자들은 엄청나게 많은

패스워드를 사용하고 있습니다.

 

기업의 인터넷의 서비스란 것은

로그인 방식이기 때문에

포탈 사이트의 로그인 부터

쇼핑몰, 온라인 게임 등

한 사람이 가입하는 수를

보수적으로 50개로 계산해도

한국 인구 5000만명의 패스워드는

25억개나 된다는 말입니다.

 

물론 인터넷은 써비스가 새로 나올 때마다

가입하기 때문에 100개도 되고 200개도 될겁니다.

 

패스워드를 잘 만들어야 해킹위험이

줄어들고 또 동일한 패스워드를

사용하지 않는게 좋다고 하는데

매번 새로운 패스워드 조합을

만드는 것은 귀찮은 일입니다.

 

사람마다 주력으로 사용하는 사이트의

패스워드는 하나 두개 정도는 있습니다.

뭔가 특별한 의미를 두고 본인만

기억할 수 있도록 만들수가 있지요.

 

그런데 이벤트 등의 이유로 1회성으로

가입하는 각종 사이트들에 주력 패스워드를

사용하는 것은 좀 부담스럽습니다.

 

이럴 때 하나의 방법은 패스워드 생성기입니다.

 

이 포스팅에서는 Random 클래스를

사용해서 만들어 보겠습니다.

 

 

프로그램으로 만든 문자열은 무작위

나열로 의미가 없기 때문에 이것을

기억하는 것은 쉽지 않을 겁니다.

비밀번호 관리 프로그램을 쓰거나

아니면 아날로그 식으로 수기로

적어놓는 등 안전하게 보관하는게 좋습니다.

(하지만 결국 디지털 파일에 저장하게 된다)

 

보안 기능이 있는 USB를 사용하는 방법도 있습니다.

 

*패스워드 생성 클래스

패스워드 생성 클래스는 3개의 질문을 합니다.

 

1. 글자수 (대문자, 소문자)

2. 숫자

3. 특수문자

 

요새는 소문자, 대문자, 특수문자를 하나씩은

넣어야 패스워드를 승인해주는 웹사이트가

많습니다. 이것들을 정해야 패스워드가 생성이 됩니다.

 

using System;
using System.Text;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("How many letters?");
            int letter = int.Parse(Console.ReadLine());

            Console.WriteLine("How many digits?");
            int digit = int.Parse(Console.ReadLine());

            Console.WriteLine("How many special characters?");
            int specialChar = int.Parse(Console.ReadLine());

            var pg = new PasswordGenerator();

            string passGenerated = pg.GeneratePassword(letter, digit, specialChar);

            Console.WriteLine($"Your Password Generated is [{passGenerated}]");
            Console.WriteLine($"Password Length: {passGenerated.Length}");
        }
    }

    class PasswordGenerator
    {
        private const string CapitalLetters =
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        private const string SmallLetters =
            "abcdefghijklmnopqrstuvwxyz";

        private const string Letters =
            CapitalLetters + SmallLetters;

        private const string Digits = "0123456789";

        private const string SpecialChars =
            "!@#$%^&*";

        private const string AllChars =
            CapitalLetters + SmallLetters + Digits + SpecialChars;


        private static Random rd = new Random();

        public PasswordGenerator()
        {   
        }

        public string GeneratePassword(int letter, int digit, int specialChar)
        {

            var password = new StringBuilder();

            for (int i = 0; i < letter; i++)
            {
                int rdIndex = rd.Next(Letters.Length);
                int rdPosition = rd.Next(password.Length);

                password.Insert(rdPosition, Letters[rdIndex]);                
            }

            for (int i = 0; i < digit; i++)
            {
                int rdIndex = rd.Next(Digits.Length);
                int rdPosition = rd.Next(password.Length);

                password.Insert(rdPosition, Digits[rdIndex]);
            }

            for (int i = 0; i < specialChar; i++)
            {
                int rdIndex = rd.Next(SpecialChars.Length);
                int rdPosition = rd.Next(password.Length);

                password.Insert(rdPosition, SpecialChars[rdIndex]);
            }

            return password.ToString();
        }

    }
}

PasswordGenerator - 패스워드 생성기 -

이 클래스의 포인트는...

 

- 패스워드에 사용할 상수 문자열

- Random 클래스 사용

- StringBuilder 클래스로 한 글자씩 추가

- 문자와 숫자, 특수문자를 섞음(rdPosition)

- string 리턴

 

아주 기본적인 기능이지만 인터넷에서

회원가입을 할 때 패스워드 만들기가

귀찮은 사람들에게 도움이 됩니다.

 

패스워드 만들기 C#

 

최소가 8개인 경우가 많으니까

글자 5 숫자 2 특수문자 1 이라던가

글자 6 숫자 1 특수문자 1 같은 조합도 괜찮지요.

 

특수문자는 Shift 키를 눌러야 하니까

많이 넣고 싶지가 않습니다.

 

그리고 위의 코드에서는 대문자와 소문자를

퉁쳐버렸는데 또 대문자도 Shift 를 눌러야 해서

너무 많으면 귀찮으니까 코드에서 나누는 것도

하나의 방법입니다. 소문자 대문자 까지 나누는 것은

번거로운 것 같아서 합쳤는데,

필요하면 저 코드에서 그냥 나누면 됩니다.

 

for문 하나 더 추가하면 되니까요.

 

GeneratePassword 메소드는 더 작게

쪼갤 수 있지만 그냥 메소드 하나에 몰아넣었습니다.

 

공유하기

facebook twitter kakaoTalk kakaostory naver band