65 비밀번호 관리자 (Password Manager)
다양한 웹사이트에서 사용하는 여러 비밀번호를 한곳에서 안전하게 관리할 수 있는 소프트웨어를 개발해 봅시다. 보너스 점수를 위해 무작위 비밀번호 생성 기능을 포함시켜 보세요.
이 프로젝트는 보안과 데이터 암호화의 기초를 익히고, 사용자의 민감한 정보를 안전하게 저장하고 관리하는 방법을 배우기에 아주 좋습니다. 특히 하나의 마스터 비밀번호(Master Password)로 전체 데이터베이스를 잠그고 해제하는 과정을 직접 설계해 보세요.
65.1 주요 개발 포인트
- 안전한 데이터 암호화: AES-256과 같은 강력한 암호화 알고리즘을 사용하여 비밀번호를 암호화하여 저장합니다.
- 마스터 비밀번호 인증: 사용자가 앱을 열 때 가장 먼저 마스터 비밀번호를 확인하도록 설계합니다.
- 무작위 비밀번호 생성기: 영문 대소문자, 숫자, 특수문자를 포함한 강력한 비밀번호를 자동으로 생성합니다.
- 클립보드 복사 및 자동 입력: 필요한 비밀번호를 선택하면 클립보드에 복사해 주거나 웹사이트에 자동으로 입력하는 기능을 추가합니다.
- 사용자 인터페이스 (GUI): 웹사이트 이름, 아이디, 비밀번호 목록을 보여주고, 검색 기능을 제공하는 UI를 구축합니다.
65.2 Python 구현 예시 (간단한 비밀번호 암호화 저장 시뮬레이션)
import hashlib
import json
import os
class PasswordManager:
"""
비밀번호를 암호화하여 저장하고 관리합니다.
"""
def __init__(self, master_password):
# 마스터 비밀번호를 해싱하여 키로 사용 (실제로는 PBKDF2 사용 권장)
self.key = hashlib.sha256(master_password.encode()).hexdigest()
self.data_file = "passwords.json"
self.passwords = self.load_data()
def load_data(self):
"""
저장된 비밀번호 데이터를 로드합니다.
"""
if os.path.exists(self.data_file):
with open(self.data_file, "r") as f:
return json.load(f)
return {}
def add_password(self, site, username, password):
"""
새로운 웹사이트의 계정 정보를 저장합니다.
"""
print(f"'{site}'의 계정 정보 추가 중...")
# 실제 구현 시 password를 self.key를 사용하여 암호화(Encrypt)해야 합니다.
self.passwords[site] = {"user": username, "pass": password}
self.save_data()
def save_data(self):
"""
비밀번호 데이터를 파일로 저장합니다.
"""
with open(self.data_file, "w") as f:
json.dump(self.passwords, f, indent=4)
print("데이터 저장 완료.")
if __name__ == "__main__":
# 마스터 비밀번호 설정 및 관리자 시작
master_pass = os.environ.get("MASTER_PASSWORD", "your_master_password_here")
manager = PasswordManager(master_pass)
# 계정 추가 테스트
manager.add_password("google.com", "user@gmail.com", "g_pass_456")
manager.add_password("github.com", "dev_fkt", "git_pass_789")
# 결과 확인 시뮬레이션
print("\n--- 저장된 사이트 목록 ---")
for site in manager.passwords:
print(f"사이트: {site}, 아이디: {manager.passwords[site]['user']}")