본문 바로가기

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

[파일] 12자리 도어락 비밀번호 10만개 추천

반응형

출처:zhihao/Moment/GettyImages


아래는 도어락용 랜덤 비밀번호 12자리 100,000개(10만개)의 파일이다.
12자리 랜덤 비번의 조건은 다음과 같다.

1. 456789 456789와 같이 반복되면 안된다(앞의 6자리와 뒤의 6자리가 같으면 안된다.)
2. 454545454545와 같이 2자리씩 같은 숫자가 계속해서 6번 반복되면 안된다.
3. 123456789012와 같이 일련되는 숫자가 링(ring) 형태로 반복되면 안된다.
4. 123456654321과 같이 일련의 숫자가 역순의 숫자형태로 배치되면 안된다.

 
파일은 ZIP 파일로 압축되었으며, 압축 해제 후 용량은 43Mb이다.

12digits_password.zip
8.98MB

 

위 비번을 생성하는 코드는 C#으로 만들어졌으며 소스는 아래와 같다.
 

using System;
using System.IO;

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[12];

            // 12자리 랜덤 비밀번호 생성
            for (int i = 0; i < 12; i++)
            {
                passwordDigits[i] = GenerateRandomDigit();
            }

            bool isRepeatedPattern = false;
            bool isConsecutive = false;
            bool isReverseOrder = true;
            for (int i = 0; i < 6; i++)
            {
                if (passwordDigits[i] != passwordDigits[11 - i])
                {
                    isReverseOrder = false;
                    break;
                }
            }

            for (int i = 0; i < 8; i++) 
            {
                if (passwordDigits[i] == passwordDigits[i + 2] &&
                    passwordDigits[i + 1] == passwordDigits[i + 3] &&
                    passwordDigits[i + 2] == passwordDigits[i + 4])
                {
                    isRepeatedPattern = true;
                    break;
                }
            }


            if (passwordDigits[0] == passwordDigits[11] &&
                passwordDigits[1] == passwordDigits[10] &&
                passwordDigits[2] == passwordDigits[9] &&
                passwordDigits[3] == passwordDigits[8] &&
                passwordDigits[4] == passwordDigits[7] &&
                passwordDigits[5] == passwordDigits[6])
            {
                isReverseOrder = true;
            }

            if (!isRepeatedPattern && !isConsecutive && !isReverseOrder)
            {
                return string.Join("", passwordDigits);
            }
        }
    }

    static void Main()
    {
        int numberOfPasswords = 1000000;
        string fileName = "12digits_password.txt";

        using (StreamWriter writer = new StreamWriter(fileName))
        {
            for (int i = 0; i < numberOfPasswords; i++)
            {
                string password = GeneratePassword();
                writer.WriteLine($"생성된 비밀번호 {i + 1}: {password}");
            }
        }

        Console.WriteLine($"파일 '{fileName}'에 비밀번호를 저장했습니다.");
    }
}

코드 실행 후 결과는 12digits_password.txt 파일에 저장된다.
만약, 10만개 이상의 번호를 생성하기를 원한다면 위 코드에서
 int numberOfPasswords = 1000000; 
이 숫자를 더 크게 변경하면 되지만, 시스템의 성능에 따라 연산 시간이 소요된다.
 

 

728x90