txt 파일의 가능한 모든 조합을 얻기 위해 bash 스크립트를 원함

txt 파일의 가능한 모든 조합을 얻기 위해 bash 스크립트를 원함

다음과 같은 문자, 숫자 및 특수 문자가 있습니다.

012345789
!@#$%
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

위의 가능한 모든 8자리 조합을 포함하는 txt 파일을 생성하는 bash 스크립트를 원합니다. 예를 들면 다음과 같습니다.

aK@05B!8등. 나에게 스크립트를 추천해 주실 수 있나요?

답변1

아래 그림은 질문에 대답하는 방법을 보여줍니다.

s='1 2 3 4 5'    # Space separated alphabet of characters

for a in $s
do
    for b in $s
    do
        for c in $s
        do
            printf "%s%s%s\n" "$a" "$b" "$c"
        done
    done
done

이 코드의 알파벳은 66자(숫자 범위에서 생략함)에 비해 5자에 불과하며 68자 대신 3자만 사용합니다. 125개의 출력을 생성합니다.

111
112
113
114
115
121
122
...
555

알파벳을 사용하지만 여전히 세 개의 반복자만 사용하면 287496개의 조합이 생성됩니다. 반복자 수의 거듭제곱으로 거듭제곱된 알파벳 문자 수를 세어 조합 수를 결정할 수 있습니다. 예를 들어, 5 3 = 125 및 66 3 = 287496의 경우 목표 요구 사항은 66 8 ≒ 3.6x10 14 조합이 됩니다 .

답변2

이 C++ 프로그램을 사용하세요. 시간이 너무 많이 걸리므로 인내심을 갖고 기다려야 합니다.

// C++ program to generate all passwords for given characters (length 8-10)

#include <bits/stdc++.h>
using namespace std;
 
void generate(char* arr, int i, string s, int len)
{

    // base case
    if (i == 0) // when len has been reached
    {
        // print it out
        cout << s << "\n";
        // cnt++;
        return;
    }
 
    // iterate through the array
    for (int j = 0; j < len; j++) {
 
        // Create new string with next character
        // Call generate again until string has
        // reached its len
        string appended = s + arr[j];
        generate(arr, i - 1, appended, len);
    }
 
    return;
}
 
// function to generate all possible passwords
void crack(char* arr, int len)
{
    // call for all required lengths
    for (int i = 8; i <= 8; i++) {
        generate(arr, i, "", len);
    }
}
 
// driver function
int main()
{
    char arr[] = {'0','1','2','3','4','5','7','8','9','!','@','#','$','%','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    int len = sizeof(arr) / sizeof(arr[0]);
    crack(arr, len);
 
    //cout << cnt << endl;
    return 0;
}

// This code is edited by RASAL RAHIM.

관련 정보