세이박스

비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)

웹프로그램
회원가입후 비밀번호를 잊은 경우 기존 비번이 암호화 처리 되어 있어(개인정보 보호법에 의해 비밀번호 암호화 의무화) 비번을 임의로 생성후 메일로 발송해야 합니다.
문자 조합을 간단하게 해 버릴 경우 해킹 시도시 비번찾기를 이용해서 이메일로 수신된 비번을 보지 않아서 추측해서 알아 낼 수 가 있습니다.
예로 "aa1234bb" 라는 임시 비번으로 생성해서 회원에게 발송하는데, 항상 숫자 부분만 변동해서 보내 준다면 해커는 역으로 0000~9999까지 조합해서 임의로 접속 시도를 해볼수 있게 됩니다.

간혹 보안 적용이 허술한 사이트의 경우 위와 같이 비번을 발송해주는 곳이 더러 있더군요.
개인정보 유출 사고는 위와 같이 개발자의 부주의가 매우 크다고 보면 됩니다.

문자 조합을 복잡하게 하는게 복잡하지도 않습니다.
아래처럼만 처리 해주셔도 랜덤한 값이 되므로 효과 적입니다.

<?
$pw = "0123456789abcdefghijklmnopqrstuvwxyz";
$temp_pw = "";
for($i=0;$i<10;$i++) {
 $temp_pw .= $ipwd[rand(0,35)];
}
echo $temp_pw;
?>

위와 같이 적용시 10자리의 랜덤한 문자 조함 결과가 나옵니다.
더욱 복잡하게 하고 싶으시면 $pw에 문자를 더 추가한 다음 rand(0,35) 값을 더 늘려 주시면 됩니다.
비밀번호 길이 또한 좀더 보안 하고 싶으시면 for() 문에서 10을 더 올려 주시면 더 복잡한 비번이 되는 것입니다.


[추가팁]

간혹 비번을 암호화 하는 방법에 대해 궁금해 하시는 분들을 위한 팁

1. 회원이 입력한 비번을 저장시 간단하게 적용하는방법
- mysql을 이용한다면 insert 경우 저장할 변수에 password() 함수를 이용해서 넣는다.
예) insert member into (passwd) values (password('비번'));

2. 로그인시 입력한 비번이 맞는지 확인
select * from member where id='아이디' and passwd = password('입력한 비번')
값이 있으면 본인, 아니면 로그인 실패처리

3. 비번 찾기시 임의 비번 발송
select * form member where '기타 회원정보로 본인 확인'
- 값이 있으면 위 임의 조합 비번으로 기존 비번 변경
예) update member set password = password('임의 문자 조합 비번') where '본인';
- 변경된 임의 문자 조합 비번 회원의 이메일로 발송

비밀번호 변경시 임의 문자와 숫자 조합으로 생성후 회원에게 이메일 전송 (비번 암호화 원리 팁)

웹프로그램
회원가입후 비밀번호를 잊은 경우 기존 비번이 암호화 처리 되어 있어(개인정보 보호법에 의해 비밀번호 암호화 의무화) 비번을 임의로 생성후 메일로 발송해야 합니다.
문자 조합을 간단하게 해 버릴 경우 해킹 시도시 비번찾기를 이용해서 이메일로 수신된 비번을 보지 않아서 추측해서 알아 낼 수 가 있습니다.
예로 "aa1234bb" 라는 임시 비번으로 생성해서 회원에게 발송하는데, 항상 숫자 부분만 변동해서 보내 준다면 해커는 역으로 0000~9999까지 조합해서 임의로 접속 시도를 해볼수 있게 됩니다.

간혹 보안 적용이 허술한 사이트의 경우 위와 같이 비번을 발송해주는 곳이 더러 있더군요.
개인정보 유출 사고는 위와 같이 개발자의 부주의가 매우 크다고 보면 됩니다.

문자 조합을 복잡하게 하는게 복잡하지도 않습니다.
아래처럼만 처리 해주셔도 랜덤한 값이 되므로 효과 적입니다.

<?
$pw = "0123456789abcdefghijklmnopqrstuvwxyz";
$temp_pw = "";
for($i=0;$i<10;$i++) {
 $temp_pw .= $ipwd[rand(0,35)];
}
echo $temp_pw;
?>

위와 같이 적용시 10자리의 랜덤한 문자 조함 결과가 나옵니다.
더욱 복잡하게 하고 싶으시면 $pw에 문자를 더 추가한 다음 rand(0,35) 값을 더 늘려 주시면 됩니다.
비밀번호 길이 또한 좀더 보안 하고 싶으시면 for() 문에서 10을 더 올려 주시면 더 복잡한 비번이 되는 것입니다.


[추가팁]

간혹 비번을 암호화 하는 방법에 대해 궁금해 하시는 분들을 위한 팁

1. 회원이 입력한 비번을 저장시 간단하게 적용하는방법
- mysql을 이용한다면 insert 경우 저장할 변수에 password() 함수를 이용해서 넣는다.
예) insert member into (passwd) values (password('비번'));

2. 로그인시 입력한 비번이 맞는지 확인
select * from member where id='아이디' and passwd = password('입력한 비번')
값이 있으면 본인, 아니면 로그인 실패처리

3. 비번 찾기시 임의 비번 발송
select * form member where '기타 회원정보로 본인 확인'
- 값이 있으면 위 임의 조합 비번으로 기존 비번 변경
예) update member set password = password('임의 문자 조합 비번') where '본인';
- 변경된 임의 문자 조합 비번 회원의 이메일로 발송

MD5 Decript 암호화 된 값을 해독해 주는 사이트

서버,보안

사용자 삽입 이미지
사용자 삽입 이미지


MD5는 Hash 방식으로 암호화 하는 것으로 한번 암호화 된 값은 decode, Decript 복호화 할 수 없는게 원칙이며 입력한 사용자의 값을 MD5로 암호화 해서 두개의 암호화 된 값이 일치 한지 유무만 판별 하는 방식이다.
요즘은 SHA 암호화 방식을 많이 이용하고 있으며, 모두 hash 암호화 방식이다.

이와 달리 base64_encode(), base85_encode() 과 같은 암호화 방식은 언제든지 복호화 할 수 있다.
base64_decode() 를 이용하면 base64로 encode된 값을 원래 값으로 손쉽게 변경 가능하다.
따라서, 암호화라고 하기엔 다소 부족함이 있다.

하지만, MD5 역시 복호화 할수 있는 방법이 있다.
http://www.md5decrypter.com

사이트에서 MD5로 암호화 된 값을 원래의 값으로 변경 해줍니다.
하지만, 이건 어디까지나 꽁수? 입니다.
조회 해 보시면 그의 대부분의 암호화 값을 못찾아 줄겁니다.
하지만, 우연히 찾게되는 값도 있습니다.
이유는 encrypter 메뉴를 클릭후 생성한 MD5 암호화 생성에서 DB에 저장시 암호화 값 뿐만 아니라 원래 값 까지 보관 해뒀다가 암호화 값이 들어오면 함께 넣어둔 원래 값을 보여 주는 원리 입니다.

현재 글을 작성하는 시점까지 등록된 MD5암호화 값이 총 5,988,457 까지 이군요.
즉, MD5 암호 해독은 위 갯수만큰 등록된 암호에 한해서 복호화 가능 합니다.

예전에 MD5 암호를 역으로 찾아 주는 프로그램도 본듯 한데 기억이 안나네요 ^^
가끔 특정 암호를 복호화 해야할 일이 생길때 활용 해보시는것도 좋을듯 합니다.

PHP dechex로 암호화

웹프로그램

$d_time = microtime ();
$code = 'x'.substr('0000000'.dechex($d_time*100000000),-7);