Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 UNIX 암호 검증하기: crypt 모듈 완벽 가이드

UNIX 시스템에서 사용자의 암호를 검증하려면 파이썬의 crypt 모듈을 사용해야 합니다. 이 모듈은 crypt(3) 루틴을 제공하며, 수정된 DES 알고리즘을 기반으로 하는 일방향 해시 함수(one-way hash function)입니다.

crypt 모듈을 사용하려면 먼저 다음과 같이 임포트해야 합니다.

import crypt

crypt.crypt(word, salt) 메서드

crypt.crypt() 메서드는 두 개의 인자를 받습니다.

  • word: 사용자가 입력한 평문 비밀번호입니다.
  • salt: 무작위 문자열로, DES 알고리즘을 4096가지 방식 중 하나로 변형(섭동)하는 역할을 합니다. salt에는 영문 대소문자, 숫자, 그리고 '/'와 '.' 문자만 포함될 수 있습니다.

이 메서드는 해시된 비밀번호를 문자열 형태로 반환합니다. 반환된 해시값을 시스템에 저장된 암호화된 비밀번호와 비교하면 사용자가 입력한 비밀번호가 올바른지 확인할 수 있습니다.

예제 코드

import crypt, getpass, spwd

def check_pass():
    username = input("Enter The Username: ")
    password = spwd.getspnam(username).sp_pwdp
    if password:
        clr_text = getpass.getpass()
        return crypt.crypt(clr_text, password) == password
    else:
        return 1

if check_pass():
    print("The password matched")
else:
    print("The password does not match")

실행 결과

(이 프로그램은 반드시 root 권한으로 실행해야 합니다.)

그림자 비밀번호(shadow password) 정보를 읽어오는 spwd.getspnam() 함수는 /etc/shadow 파일에 접근하기 때문에 root 권한이 필요합니다.

$ sudo python3 example.py
Enter The Username: unix_user
Password:
The password matched

참고 사항

파이썬 3.13부터는 crypt 모듈이 표준 라이브러리에서 제거되었으므로, 최신 환경에서는 passlib 같은 서드파티 라이브러리를 사용하는 것이 좋습니다. 또한 실제 운영 환경에서는 보안상의 이유로 DES 기반 crypt보다 SHA-256, SHA-512 등 더 강력한 해시 알고리즘을 사용하는 것이 권장됩니다.