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
가을에 피는 국화는 첫 봄의 상징으로 사랑받는 개나리를 시샘하지 않는다. 역시 봄에 피는 복숭아꽃이나 벚꽃을 부러워하지 않는다. 한여름 붉은 장미가 필 때, 나는 왜 이렇게 다른 꽃보다 늦게 피나 한탄하지도 않는다. 그저 묵묵히 준비하며 내공을 쌓고 있을 뿐이다. 그러다가 매미소리 그치고 하늘이 높아지는 가을, 드디어 자기 차례가 돌아온 지금, 국화는 오랫동안 준비해온 그 은은한 향기와 자태를 마음껏 뽐내는 것이다. (한비야)