본문 바로가기

디지털포렌식(Digital forensic)/숫자

[파일] 6 자리 비밀번호 추천

반응형

많은 분들의 요청으로 6자리 비밀번호 1,000만개를 파일로 올렸다.
파일만 다운받고 싶다면 ▼ 여기로 가면 된다.
https://delock.tistory.com/38

 

[파일]이거 찾나? "1000만 개의 추천 비밀번호~?"

비밀번호를 만들 때 머리가 아프신 분들을 위해 1000만 개의 6자리 랜덤비밀번호를 첨부 파일로 올린다. 파일은 txt 텍스트 파일이며, 380MB의 사이즈를 갖고 있다. 파일당 용량이 정해져서 쪼개서

delock.tistory.com

6자리 비밀번호는 6자리로 구성된 보안 비밀번호를 가리킨다.
6자리 비번은 온라인 서비스나 계정에서 다른 암호나 비번과 같이 사용된다.


4자리의 비번 생성은 사용자가 비교적 쉽게 기억할 수 있지만

6자리 비번은 생각만큼 쉽지 않다.


6자리 비번을 만드는 코드는 아래의 조건들을 포함했다.


1) 앞서 포스팅처럼 반복되는 숫자가 있어서는 안되는 조건은 같다.

2) 앞의 3자리와 뒤의 3자리가 같아서는 안된다는 조건
3) 2자리, 2자리, 2자리의 숫자가 같아서는 안된다는 조건
4) 숫자가 나열되면 안된다는 조건

ConsoleApp_6.zip
0.03MB

using System;

class Program
{
    static Random random = new Random();

    static int GenerateRandomDigit()
    {
        return random.Next(10); // 0부터 9까지의 난수 생성
    }

    static string GeneratePassword()
    {
        while (true)
        {
            int[] passwordDigits = new int[6];

            // 1. 앞의 3자리와 뒤의 3자리가 같으면 안됨
            do
            {
                for (int i = 0; i < 6; i++)
                {
                    passwordDigits[i] = GenerateRandomDigit();
                }
            } while (passwordDigits[0] == passwordDigits[3] && passwordDigits[1] == passwordDigits[4] && passwordDigits[2] == passwordDigits[5]);

            // 2. 2자리 + 2자리 + 2자리의 숫자가 반복되면 안됨
            bool isRepeatedPattern = true;
            for (int i = 0; i < 4; i += 2)
            {
                if (passwordDigits[i] != passwordDigits[i + 1] || passwordDigits[i + 2] != passwordDigits[i + 3])
                {
                    isRepeatedPattern = false;
                    break;
                }
            }
            if (isRepeatedPattern)
                continue;

            // 3. 0, 1, 2, 3, 4, 5와 같이 연속되면 안됨
            bool isConsecutive = true;
            for (int i = 0; i < 5; i++)
            {
                if (passwordDigits[i] != passwordDigits[i + 1] - 1)
                {
                    isConsecutive = false;
                    break;
                }
            }
            if (isConsecutive)
                continue;

            // 조건을 모두 만족하는 비밀번호 생성
            return string.Join("", passwordDigits);
        }
    }

    static void Main()
    {
        string password = GeneratePassword();
        Console.WriteLine("생성된 비밀번호: " + password);
    }
}

결과

 

위 코드의 main( )에서 비밀번호 30개 생성하는 코드를 추가하도록 반복하는 코드로 변경하면

static void Main()
    {
        int numberOfPasswords = 30;
        for (int i = 0; i < numberOfPasswords; i++)
        {
            string password = GeneratePassword();
            Console.WriteLine($"생성된 비밀번호 {i + 1}: {password}");
        }
    }

결과


이 코드에 몇 개의 제약 조건들을 더 추가하면?

728x90