암호화된 기록(Vault): AES-128(Fernet)을 사용하여 저장된 비밀번호 자동 암호화.
안전한 Vault 저장소: 전용 vault는 .env(권장) 또는 엄격한 0600 파일 권한이 있는 레거시 .vault.key를 통해 암호화 키를 처리합니다.
제로 누출 아키텍처: 🛡️ PWA 모드에서 브라우저 액세스로부터 소스 코드 및 로그 차단; 엔트로피 분석을 위해 CLI 모드에서 민감한 입력이 마스킹됩니다.
편집된 내보내기: 기본적으로 비밀번호가 자동 편집되는 보안 우선 기록 내보내기
제로 들여쓰기 UI: 모든 모드에서 깔끔하고 전문적인 왼쪽 정렬 출력
스마트 리트스피크: 보다 자연스럽고 읽기 쉬운 비밀번호를 위한 확률적 치환
강력한 유효성 검사: 기본값과 재귀적 오류 처리가 포함된 대화형 프롬프트
방어적 PWA 프론트엔드: 🛡️ CDN 자산에 대한 내장 안전 검사로 초기화 충돌 방지.
전역 수정자: --easy-read 및 --easy-say 모드
편집증 모드: 최대 보안을 위해 키보드 타이밍 지터를 통한 선택적 수동 엔트로피 수집.
설치
root@kitploit:~
# 저장소 복제
git clone https://github.com/krishnakanthb13/password_generator.git
cd password_generator
# 의존성 설치 (colorama, cryptography, pyperclip 등)
pip install -r requirements.txt
빠른 시작
root@kitploit:~
# 20자 랜덤 비밀번호 생성
python main.py random -l 20
# 4단어 패스프레이즈 생성
python main.py phrase -w 4 --capitalize
# 리트스피크 패스프레이즈 생성
python main.py leet -w 3 -s _
# 엔트로피 분석과 함께 생성
python main.py --show-entropy random -l 16
# 대화형 모드 실행
python main.py --interactive
# 사전 설정 프로필 사용 (Strong)
python main.py --preset strong --show-entropy
사용 예제
랜덤 비밀번호
root@kitploit:~
# 기본 16자 비밀번호
python main.py random
# 24자, 문자만
python main.py random -l 24 --no-symbols --no-digits
# 읽기 쉬운 (0/O, 1/l/I 제외)
python main.py --easy-read random -l 20
# 최소 요구 사항 포함
python main.py random -l 16 --min-upper 2 --min-digits 2 --min-symbols 1
# 균형 모드 (대부분 문자, 적은 기호)
python main.py random -l 24 --balanced
# 5개 세그먼트, 각 5자
python main.py license --segments 5 --segment-length 5
# 4개 세그먼트, 각 8자
python main.py license --segments 4 --segment-length 8
개발자 토큰
root@kitploit:~
# HS256용 JWT 시크릿
python main.py jwt --bits 256
# Base64 API 키
python main.py base64 -b 32 --url-safe
# UUID 토큰 (v4 랜덤)
python main.py uuid --upper
# UUID v7 (시간 기반, 정렬 가능)
python main.py uuid --ver 7
# 또는 단축 명령어
python main.py uuid --v7
# 짧은 UUID (Base58 인코딩, ~22자)
python main.py uuid --short
# 단축 명령어로 v7 UUID 생성
python main.py u --v7
# 10개의 짧은 v4 UUID 생성
python main.py uuid --v4 --short -n 10
# NATO 음성 변환
python main.py phonetic --text "PassForge"
# 출력: Papa-Alpha-Sierra-Sierra-Foxtrot-Oscar-Romeo-Golf-Echo
보안 및 로깅
root@kitploit:~
# 기존 비밀번호 분석
python main.py analyze "p@ssword123"
# 기록에 로그
python main.py --log random -l 16
# 마지막 10개 기록 항목 보기 (기본)
python main.py history
# 모든 기록 항목 보기 (실시간 복호화)
python main.py history --all
# 편집된 비밀번호로 기록 보기
python main.py history --redact
# 기록 내보내기 (기본 편집됨)
python main.py history --export backup.json
# 기록 내보내기 (평문 - 주의 필요)
python main.py history --export secrets.csv --no-redact
# 스크립트용 JSON 출력
python main.py --json jwt --bits 256
명령어 참조
플래그
설명
--preset
사전 정의된 보안 프로필 사용 (strong, memorable, dev, pin, web, wifi, key)
-i, --interactive
대화형 메뉴 모드 실행
--paranoid
편집증 모드 활성화 (수동 엔트로피 수집)
--json
JSON 형식으로 출력
--show-entropy
엔트로피 분석 표시 (런처에서 기본 활성화)
--check-strength
zxcvbn 패턴 분석 실행
-c, --clipboard
결과를 클립보드에 복사
--confirm-copy
클립보드 복사 전 확인 프롬프트 표시
--clipboard-timeout
N초 후 클립보드 자동 지우기 (기본: 30)
--log
비밀번호를 기록에 로그 (AES-128 암호화)
--no-color
색상 출력 비활성화
--easy-read
모호한 문자 제외 (0/O, 1/l/I)
--easy-say
발음 가능한 문자만 (기호 없음)
생성기별 옵션
랜덤 (random, r)
플래그
기본값
설명
-l, --length
16
비밀번호 길이 (4-1024)
--no-uppercase
-
대문자 제외
--no-lowercase
-
소문자 제외
--no-digits
-
숫자 제외
--no-symbols
-
기호 제외
--include
-
포함할 추가 문자
--exclude
-
제외할 문자
--no-repeats
-
반복 문자 없음
--min-upper
0
최소 대문자 수
--min-lower
0
최소 소문자 수
--min-digits
0
최소 숫자 수
--min-symbols
0
최소 기호 수
--balanced
-
균형 비율 (60/20/20)
-n, --count
1
생성할 개수
패스프레이즈 (phrase, p)
플래그
기본값
설명
-w, --words
4
단어 수 (2-64)
-s, --separator
-
단어 구분자
--capitalize
-
각 단어 대문자화
--uppercase
-
모든 단어 대문자
--alternate
-
교차 대소문자 (aLtErNaTe)
--wordlist
-
사용자 정의 단어 목록 경로
-n, --count
1
생성할 개수
리트스피크 (leet, l)
플래그
기본값
설명
-w, --words
3
단어 수 (2-64)
-s, --separator
-
단어 구분자 ( - _ . , )
-n, --count
1
생성할 개수
PIN (pin)
플래그
기본값
설명
-l, --length
6
PIN 길이 (4-64)
-n, --count
1
생성할 개수
발음 가능 (pronounce, pr)
플래그
기본값
설명
-l, --length
12
비밀번호 길이 (4-128)
-n, --count
1
생성할 개수
UUID (uuid)
플래그
기본값
설명
--ver
4
UUID 버전 (1, 4, 7)
--short
-
짧은 형식 (Base58)
--upper
-
대문자 출력 (16진수만)
-n, --count
1
생성할 개수
Base64 (base64, b64)
플래그
기본값
설명
-b, --bytes
32
랜덤 바이트 수
--url-safe
-
URL 안전 문자 사용
JWT 시크릿 (jwt)
플래그
기본값
설명
--bits
256
비트 길이 (256, 384, 512)
--hex
-
16진수 문자열로 출력
WiFi 키 (wifi)
플래그
기본값
설명
-l, --length
24
키 길이 (8-63, 기본: 24)
--simple
-
영숫자만 (기호 없음)
라이선스 키 (license)
플래그
기본값
설명
--segments
4
세그먼트 수 (2-64)
--segment-length
4
세그먼트당 문자 수 (2-32)
복구 코드 (recovery)
플래그
기본값
설명
-n, --count
10
코드 수 (5-20, 기본: 10)
-l, --length
10
코드 길이 (숫자 또는 단어, 기본: 10/3)
--words
-
단어 기반 코드 사용
OTP 시크릿 (otp)
플래그
기본값
설명
--digits
6
코드 길이 (6 또는 8)
--period
30
시간 주기 (초)
--qr
-
터미널에 QR 코드 표시
패턴 (pattern)
플래그
기본값
설명
--grid
3
그리드 크기 (예: 3x3)
음성 (phonetic, ph)
플래그
기본값
설명
--text
-
NATO 알파벳으로 변환할 텍스트
-l, --length
8
랜덤 시퀀스 길이 (4-64)
기록 (history)
플래그
기본값
설명
--last
10
마지막 N개 항목 표시 (1-100, 기본: 10)
--all, -a
-
모든 기록 항목 표시 (--last 재정의)
--search
-
키워드로 기록 필터링
--redact
-
터미널 출력에서 비밀번호 편집
--export
-
기록을 파일로 내보내기 (JSON/CSV)
--no-redact
-
내보내기에서 비밀번호 미편집 (주의!)
--clear
-
모든 기록 항목 삭제
엔트로피 가이드
PassForge는 원시 문자 풀 크기, 섀넌 비트 및 무차별 대입 시간 추정치를 포함한 포괄적인 엔트로피 보고서를 제공합니다.
password_generator/
├── main.py # 진입점
├── requirements.txt # 의존성
├── src/
│ ├── __init__.py
│ ├── cli.py # 인수 파서 및 배너
│ ├── command_handler.py # 명령어 라우팅
│ ├── interactive.py # 대화형 메뉴
│ ├── generators/ # 모든 비밀번호 생성기
│ │ ├── base.py # 추상 기본 클래스
│ │ ├── random_password.py # 랜덤 비밀번호 생성기
│ │ ├── passphrase.py # 패스프레이즈 생성기
│ │ ├── leetspeak.py # 리트스피크 생성기
│ │ ├── pin.py # PIN 생성기
│ │ ├── pronounceable.py # 발음 가능 비밀번호 생성기
│ │ ├── uuid_token.py # UUID 토큰 생성기
│ │ ├── base64_secret.py # Base64 시크릿 생성기
│ │ ├── jwt_secret.py # JWT 시크릿 생성기
│ │ ├── wifi_key.py # WiFi 키 생성기
│ │ ├── license_key.py # 라이선스 키 생성기
│ │ ├── recovery_codes.py # 복구 코드 생성기
│ │ ├── otp.py # OTP 생성기
│ │ ├── pattern.py # 패턴 생성기
│ │ └── phonetic.py # NATO 음성 생성기
│ ├── security/
│ │ ├── entropy.py # 엔트로피 계산기
│ │ ├── strength_checker.py # zxcvbn 통합
│ │ └── vault.py # 안전한 기록 암호화
│ ├── output/
│ │ ├── formatter.py # 색상 코드 출력
│ │ ├── logger.py # 기록 로깅
│ │ ├── clipboard.py # 안전한 클립보드 처리
│ │ └── qrcode_gen.py # OTP용 QR 코드 생성
│ ├── config/
│ │ ├── loader.py # YAML/JSON 설정 로더
│ │ └── presets.py # 사전 정의된 보안 프로필
├── data/
│ └── wordlists/ # 테마 단어 목록 (animals.txt, biology.txt 등)
└── tests/
테스트
root@kitploit:~
# 모든 테스트 실행
python -m pytest tests/ -v
# 특정 테스트 클래스 실행
python -m pytest tests/test_generators.py::TestRandomPasswordGenerator -v
# 커버리지와 함께 실행
python -m pytest tests/ --cov=src --cov-report=html
53개의 단위 테스트가 다음을 포함합니다:
15개의 특화된 생성기 모드
엔트로피 및 zxcvbn 강도 계산기
클립보드 자동 지우기 및 안전한 저장소
QR 코드 ASCII 생성 로직
설정 로딩 및 사전 설정
설정
PassForge는 YAML 또는 JSON 형식의 설정 파일을 지원합니다.
설정 파일 위치 (순서대로 검색):
./passforge.yaml 또는 ./passforge.json
./.passforge.yaml 또는 ./.passforge.json
~/.passforge/config.yaml 또는 ~/.passforge/config.json
PassForge는 PyInstaller를 사용하여 단일 독립 실행형 실행 파일로 컴파일할 수 있습니다.
Windows
root@kitploit:~
# 빌드 스크립트 사용
passforge_build.bat
# 또는 수동
pip install pyinstaller
pyinstaller --onefile --name passforge --console main.py
Linux/macOS
root@kitploit:~
# 빌드 스크립트 사용
chmod +x passforge_build.sh
./passforge_build.sh
# 또는 수동
pip install pyinstaller
pyinstaller --onefile --name passforge --console main.py
실행 파일은 dist/ 폴더에 생성됩니다 (~7MB, 의존성 없음).
🌐 PassForge Web (PWA 애드온)
PassForge는 이제 현대적이고 반응형 웹 인터페이스(PWA)를 포함하여, CLI 버전과 완전한 동등성을 유지하면서 시각적으로 비밀번호를 생성하고 관리할 수 있는 방법을 제공합니다.
주요 기능
사이드바 인터페이스: 모든 생성기 유형 간 쉬운 탐색.
시각적 슬라이더: 대화형 슬라이더로 길이 및 단어 수 조정.
QR 지원: 비밀번호 또는 OTP 시크릿 공유를 위한 즉시 QR 코드 생성.
어두운/밝은 모드: 시스템 인식 테마 전환을 통한 프리미엄 미학.
설치 가능: Windows, Linux 및 모바일에서 PWA 설치 지원.
공유 기록: CLI와 동일한 암호화된 로그 파일 사용.
PWA 실행
웹 인터페이스를 시작하려면 사용 중인 OS에 맞는 런처 스크립트를 실행하세요:
Windows: passforge_pwa.bat
Linux/macOS: passforge_pwa.sh
[!IMPORTANT]
보안 강화 (v34+): PWA는 이제 SecureStaticFiles 핸들러를 사용하여 브라우저가 Python 소스 파일, 로그 및 암호화 키에 접근하는 것을 명시적으로 차단합니다. 기록 접근은 내부 API 키 핸드셰이크를 통해 보호됩니다. 프론트엔드 로직에는 외부 CDN 자산에 대한 방어적 래퍼도 포함되어, CDN이 차단된 경우에도 기능이 유지됩니다.
[!TIP]
빌드 가용성: PWA 파일은 소스 코드 및 ZIP/Tarball 배포판에 포함됩니다. PWA는 단일 파일 .exe 바이너리에 포함되어 있지 않습니다.
런처는 필요한 의존성(fastapi, uvicorn)을 자동으로 설치하고, 로컬 서버를 http://127.0.0.1:8093에서 시작하며 브라우저를 엽니다.