PHP & Others

mysql password sha1

컨텐츠 정보

본문

MySQL 의 패스워드로 잠시 고민... 

대부분의 설치형 보드에서 MySQL 의 PASSWORD() 함수를 써서 사용자의 패스워드를 저장한다. 
문제는 접속 어플리케이션에서 날 패스워드를 날려 서버에서 비교하는 것은 말도 안된다는 것. 
쌍방간에 인코딩을 적절히 하려면 먼저 MySQL이 패스워드를 저장하는지 알아야 할 것 아닌가... 

일단 mysql 에서 패스워드가 어케 동작하는지 보자구. 

mysql -u root -p 

mysql> select password('mypass'); 
+-------------------------------------------+ 
| password('mypass') | 
+-------------------------------------------+ 
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 | 
+-------------------------------------------+ 
1 row in set (0.00 sec) 


40글자. 160비트다. 


대충 인터넷을 뒤져보자. 

MySQL 사이트. 
http://dev.mysql.co...assword-hashing.html
 

여기에 달린 리플이 재미난다. 

function mysql_41_password($in) 

$p=sha1($in,true); 
$p=sha1($p); 
return "*".strtoupper($p); 


오호~~ 단순히 SHA1을 두번 거친 놈이네. 


진짜 그런지 테스트. (PHP) 


<?php 
$string = 'mypass'; 
printf("Original string: %s\n", $string); 
printf("MD5 hash: %s\n", md5($string)); 
printf("SHA-1 hash: %s\n", sha1($string)); 
printf("MySQL Pass: %s\n", sha1(sha1($string, true))); 
?> 

결과는 

Original string: mypass 
MD5 hash: a029d0df84eb5549c641e04a9ef389e5 
SHA-1 hash: e727d1464ae12436e899a726da5b2f11d8381b26 
MySQL Pass: 6c8989366eaf75bb670ad8ea7a7fc1176a95cef4 

대문자로 바꾸고 앞에 *만 붙이면 MySQL 의 패스워드 인코딩과 동일하다. 

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
해가 들면 어떻고, 바람이 불면 어떻고, 눈이 오면 어떠랴. 해가 들어주어도 고맙고, 바람이 불어주어도 고맙고, 눈이 와주어도 고마울 뿐. 그렇다, 고맙지 않은 것이 없다. 밤은 밤이어서 고맙고, 새벽은 새벽이어서 고맙고, 낮은 낮이어서 고맙다. 아, 고마운 삼라만상이여! (정채봉)