MD5, SHA-1, MySQL Pass 서로간의 변경

리눅스/MySQL|2015. 1. 16. 11:18
반응형

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: %sn", $string); 
printf("MD5 hash: %sn", md5($string)); 
printf("SHA-1 hash: %sn", sha1($string)); 
printf("MySQL Pass: %sn", sha1(sha1($string, true))); 
?> 

결과는 

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

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

[출처] http://www.gpgstudy.com/forum/viewtopic.php?p=125137&sid=cf619e282c948f016dbbbdf24d54ee32

반응형

댓글()