2015-10-22

beego Tutorial 9 : 비밀번호 단방향암호화(SHA512) 하기



  • 정보통신망법, 개인정보보호법 등에 의하면 비밀번호는 단방향암호화(SHA256 등), 개인정보는 양방향암호화(AES256 등)를 하도록 되어 있습니다. 지금까지 작성한 예제는 이런 법에 맞지 않아서 서비스할 수 없겠네요. 여기에서는 비밀번호의 단방향 암호화를 구현해보도록 하겠습니다.
  • 먼저, 기존 DB에 들어있던 사용자 정보를 모두 삭제합시다.
    $ cd $GOPATH/src/xyz
    $ sqlite xyz.db
    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
    2|testid2|passwd2|nick2
    3|testid3|passwd3|nick3
    4|testid4|passwd4|nick4
    6|admin|dpeltms3|ADMIN
    sqlite> delete from tb_admin;
    sqlite> select * from tb_admin;
    sqlite> .quit
  • xyz/models/admin.go 에 다음을 추가합니다. 이 부분이 실제로 SHA512 로 단방향암호화를 하는 부분입니다.
    ...
     
    import (
        "github.com/astaxie/beego/orm"
        "crypto/sha512"
        "encoding/hex"
    )
     
    ...
     
    func (this *Admin) SetPassword(passwd string) {
        sha := sha512.New()
        sha.Write([]byte(passwd))
        this.Password = hex.EncodeToString(sha.Sum(nil))
    }
     
    ...
    그리고, this.password = passwd 라고 되어 있는 부분도 this.SetPassword(passwd) 로 변경해줍니다. Insert() 와 Chg_password() 에 있습니다.
  • 이제, 관리자를 추가해보고, DB에서 비밀번호가 어떻게 들어가 있는지 확인해봅니다.
    $ sqlite3 xyz.db
    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;
    8|myid|d49434a7e6f3220b6ec15bff84429934d519d0443d20ff46ff3a36e1fc50fc2d43c939d259042987162202dcbbc8788752ea79c02379064ab64363b069278c32|마이이이디
    sqlite> .quit
    비밀번호가 사람이 알아볼 수 없는 형태로 되어 있지요? 그러면 잘 된 것입니다. *^^*


댓글 없음:

댓글 쓰기