2016-11-18

Django 1.10.3 Tutorial : 비밀번호 단방향암호화(SHA256) 하기


  • 정보통신망법, 개인정보보호법 등에 의하면 비밀번호는 단방향암호화(SHA256 등), 개인정보는 양방향암호화(AES256 등)를 하도록 되어 있습니다. 지금까지 작성한 예제는 이런 법에 맞지 않아서 서비스할 수 없겠네요. 여기에서는 비밀번호의 단방향 암호화를 구현해보도록 하겠습니다.
  • 먼저, 기존 DB에 들어있던 사용자 정보를 모두 삭제합시다.
    $ cd $PRJNAME/web
    $ sqlite db.sqlite3
    SQLite version 3.7.9 2011-11-01 00:52:41
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> select * from tb_admin;
    1|testid1|passwd1|nick1|010-1111-1111|2016-11-16|
    2|testid2|passwd2|nick2|010-2222-2222|2016-11-16|
    3|testid3|passwd3|nick3|010-3333-3333|2016-11-16|
    4|testid4|passwd4|nick4|010-4444-4444|2016-11-16|
    5|testid5|passwd5|nick5|010-5555-5555|2016-11-16|
    sqlite> delete from tb_admin;
    sqlite> select * from tb_admin;
    sqlite> .quit
  • $PRJNAME/web/prjname/models/admin.py 에 다음을 추가합니다.
    ...
     
    import hashlib
     
    ...
     
        def _get_password(self):
            return self.password
     
        def _set_password(self, passwd):
            self.password = hashlib.sha256(passwd.encode('utf-8')).hexdigest()
     
     
        hashed_password = property(_get_password, _set_password)
     
    ...
  • $PRJNAME/web/prjname/views/mgmt/admin.py 에서 관리자추가, 비밀번호수정에 관련된 메소드를 수정합니다.
    ...
    # 관리자 추가
    ...
     
            # admin.password = form.cleaned_data['passwd1']
            admin.hashed_password = form.cleaned_data['passwd1']
     
    ...
     
    # 비밀번호 수정
    ...
            # admin.password = passwd1
            admin.hashed_password = passwd1
    ...
  • 이제, 관리자를 추가해보고, DB에서 비밀번호가 어떻게 들어가 있는지 확인해봅니다.
    > sqlite3 db.sqlite3
    SQLite version 3.15.0 2016-10-14 10:20:30
    Enter ".help" for usage hints.
    sqlite> select * from tb_admin;
    7|user1|3b1d7e9a7c37141350fb473fa099b8b18030cde1909f363e3758e52d4ea1a7b4|nick1|010-1111-1111|2016-11-18|
    sqlite> .quit
    비밀번호가 사람이 알아볼 수 없는 형태로 되어 있지요? 그러면 잘 된 것입니다. *^^*

댓글 없음:

댓글 쓰기