9장 연습 문제 10번, 11번

이번 문제는 사용자 id 와 패스워드를 입력 받아서 암호 파일 access에 저장하는 프로그램을 작성하는 문제이다.

저장 형식은 id:패스워드 인데, 패스워드를 암호화 해서 저장하라고 했다.

그런데 책에서는 암호화 방식으로 sha 모듈을 사용 하라고 했는데, 파이썬 2.6 버전에서는 sha 모듈이 더 이상 사용 되지 않고 있다. 대신 hashlib 에 여러 암호화 모듈을 모아서 사용 하고 있는데, hashlib 에 sha1 이 책에서 사용하고 있는 암호화 방식과 같다.

즉, 책에 나온 예를 바꾸면
>>> import hashlib
>>> password = 'my pass word'     # 내 패스워드
>>> encrypted = hashlib.sha1(password).hexdigest()
>>> encrypted
'f64e382ba76a546b48d8e3b924ef1592fdc11487'
로 바꿀 수 있다.

그리고 프로그램을 코딩 하면 아래와 같이 코딩할 수 있다.
import hashlib

ID = raw_input('User ID : ')
password = raw_input('User Password : ')

encrypted = hashlib.sha1(password).hexdigest()
f = open('access.txt', 'a')
f.write(':'.join([ID, encrypted+'\n']))

11번 문제는 사용자로부터 id 와 패스워드를 입력 받아 access 파일에 등록된 사용자인지 아닌지를 확인하는 프로그램을 작성하는 문제이다. 위의 코딩을 살짝 바꾸어 아래와 같이 코딩할 수 있다.
import hashlib

ID = raw_input('User ID : ')
password = raw_input('User Password : ')

encrypted = hashlib.sha1(password).hexdigest()
f = open('access.txt')
for line in f :
    if line == ':'.join([ID, encrypted + '\n']) :
        print 'You are a registered member.'
        break
else :
    print 'Sorry, you are not a registered member.'

댓글 없음:

댓글 쓰기