mysql 에서 사용하는 암호화 알고리즘이 무엇입니까 ?

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

mysql 에서 사용하는 암호화 알고리즘이 무엇입니까 ?

Post by 비회원 »

안녕하세요.

mysql 에서,

Code: Select all

insert into test
(number, name, jumin)
values
(1, '홍길동', password('7709091333164'));
이런형태로 암화화 할 필드를 password 로 감싸주면 암호화가 된다고 합니다.

이렇게 mysql 에서 암호화된 데이타와 비교하기 위해
암호화 과정을 클라이언트에서 하려고 하는데, 어떤 알고리즘이 사용되는지 모르겠네요.
MD5 와 같이 그 알고리즘이 일반화 된거라면, 소스만 구하면 해결 될것 같은데요...
이에 대해 아시는분 있으시면 부탁드립니다.
비회원

Post by 비회원 »

http://dev.mysql.com/doc/refman/5.1/en/ ... n_password

mysql 4.1 전후의 호환성 문제나 password()의 용도를 생각하면
MD5나 SHA1을 사용하는 게 좋습니다
oranke
Posts: 244
Joined: 2002-05-09 09:00

Post by oranke »

SHA1 을 두 번 돌린 값을 대문자로 바꾸고 앞에다 *을 붙인 것이더군요.
궁금해서 여기저기 뒤져보던 흔적이 하드에 남아 있길래 올려봅니다.
내하드 wrote: 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.com/doc/refman/5.1/en/ ... shing.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 의 패스워드 인코딩과 동일하다.
seeper
Posts: 1483
Joined: 2003-06-06 23:19
Contact:

Post by seeper »

mysql은 어차피 소스가 공개라..

소스 구해서 encryp 라던지 "password" 라던지 찾아보면 나옵니다.

c언어로 구현되었던걸로 기억납니다.

단, 버전이 두가지 있습니다. (나중버전이 해쉬 길이 늘린 버전)
seeper0 (a) gmail.com [email주소 무단수집거부]
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

서버나 라이브러리 버전과 상관 없이 확실한 방법 하나는 mysql의 PASSWORD() 함수를 그대로 사용하는 것입니다. 이를테면

SELECT PASSWORD('평문') AS encrypted_password;

를 질의하면 암호문이 반환되고요. 또는 질의문에서 이런 식으로 비교할 수도 있습니다.

.... WHERE `jumin` = PASSOWRD('평문')
Locked