[함수] 단방향 암호화는 crypt() !!!!!
로빈아빠
본문
md5() 를 그냥 쓰면 아무리 복잡하게 해도 1:1 대응이 됩니다.
crypt() 를 아래와 같이 사용하면 1:1 대응이 안됩니다.
생성시 마다 다른 해시값이 만들어집니다.
http://kr.php.net/manual/kr/function.crypt.php
Example #1 crypt() 예제
<?php
$password = crypt('mypassword'); // salt 자동 생성
/* 패스워드를 비교할 때, 다른 해싱 알고리즘을 사용하는 문제를
피하기 위해서, crypt()가 생성한 전체 결과를 salt로 주어야
합니다. (위에서 밝혔듯이, 표준 DES 기반 암호 해싱은 2 문자
salt를 사용하지만, MD5 기반 해싱은 12 문자를 사용합니다) */
if (crypt($user_input, $password) == $password) {
echo "패스워드 확인!";
}
?>
ps. 비밀번호 처럼 '검색' 이 필요하지 않은 곳에만 사용할 수 밖에 없겠죠.
검색이 요구되는 주민번호 같은 것은 어쩔 수 없이 1:1 매칭되는 암호화 알고리즘을 사용하거나,
복호화가 되는 암호화 알고리즘을 쓸 수 밖에요.
- MySQL -
만들기
select encrypt('비밀번호', concat('$1$', md5(unix_timestamp())));
비교하기
select encrypt('비밀번호', '암호화된 비밀번호') = '암호화된 비밀번호'
- PostgreSQL -
http://www.postgresql.org/docs/8.3/static/pgcrypto.html
만들기
select crypt('비밀번호', gen_salt('md5'));
License : Just do it!
crypt() 를 아래와 같이 사용하면 1:1 대응이 안됩니다.
생성시 마다 다른 해시값이 만들어집니다.
http://kr.php.net/manual/kr/function.crypt.php
Example #1 crypt() 예제
<?php
$password = crypt('mypassword'); // salt 자동 생성
/* 패스워드를 비교할 때, 다른 해싱 알고리즘을 사용하는 문제를
피하기 위해서, crypt()가 생성한 전체 결과를 salt로 주어야
합니다. (위에서 밝혔듯이, 표준 DES 기반 암호 해싱은 2 문자
salt를 사용하지만, MD5 기반 해싱은 12 문자를 사용합니다) */
if (crypt($user_input, $password) == $password) {
echo "패스워드 확인!";
}
?>
ps. 비밀번호 처럼 '검색' 이 필요하지 않은 곳에만 사용할 수 밖에 없겠죠.
검색이 요구되는 주민번호 같은 것은 어쩔 수 없이 1:1 매칭되는 암호화 알고리즘을 사용하거나,
복호화가 되는 암호화 알고리즘을 쓸 수 밖에요.
- MySQL -
만들기
select encrypt('비밀번호', concat('$1$', md5(unix_timestamp())));
비교하기
select encrypt('비밀번호', '암호화된 비밀번호') = '암호화된 비밀번호'
- PostgreSQL -
http://www.postgresql.org/docs/8.3/static/pgcrypto.html
만들기
select crypt('비밀번호', gen_salt('md5'));
License : Just do it!
관련링크
댓글목록
등록된 댓글이 없습니다.