본문 바로가기
PHP

비밀번호 암호화해서 DB에 저장 후 비교하기

by ethanjoh 2009. 2. 9.
비밀번호를 저장하는데 여러 가지 방법이 있더군요.
그 중에 php의 sha1() 함수를 써보았습니다.

우선은 회원가입 시 sha1() 함수로 비밀번호를 DB에 저장합니다.
POST 방식으로 아이디와 비밀번호가 넘어왔다면, $passwd 변수에 sha1() 함수의 리턴값을 대입해서 암호화합니다.

$id = $_POST['id'];
$passwd = sha1($_POST['passwd']);

mysql_query("INSERT INTO member (id, passwd) VALUES('$id', '$passwd')");

<br />



이 때 중요한 것이 DB의 passwd 자릿수입니다.
varchar(41) 로 잡아줍니다. <- 요게 정확한 건지 아직 확인필요!

그 다음엔 로그인 시에 저장된 비밀번호와 입력한 비밀번호를 비교합니다.
sha1() 함수는 단방향이기 때문에 암호화 할 뿐 복호화 하지 않습니다.

그래서, 로그인 시에 입력한 비밀번호를 다시 암호화 해서 저장된 값과 비교를 해줍니다.

$id = $_POST['id'];
$passwd = sha1($_POST['passwd']);

$result = mysql_query("SELECT * FROM member WHERE id='$id'");
$rows = mysql_fetch_array($result);

if(!$result) {
    echo "해당 ID가 없습니다.";
} elseif($rows['passwd'] != $passwd) {
    echo "비밀번호가 틀립니다.";
}


간단하게 말해 위와 같은 식으로 처리합니다.

그 밖에도 sql의 password() 함수를 통해 저장하는 방법도 있던데, 아마 루틴은 거의 동일할 겁니다.

sha1()으로 암호화 해서 저장하게 되면 DB에는 011c945f30ce2cbafc452f39840f025693339c42 이런 식으로 들어가 있습니다.

아무래도 텍스트 그대로 노출되어 있다면 관리자가 다 볼 수도 있고...안전을 위해 암호화해서 저장해야겠죠.