MySQL에서 사용되는 password 함수는 입력되는 문자열을 Hashing 하여 돌려준다. MySQL 4.x 버전 이전까지는 아마 MD5 알고리즘을 사용하였는데 4.x 이후에는 PASSWORD함수의 알고리즘이 SHA1으로 바뀌고 이전 호환성을 위해 이전 함수는 OLD_PASSWORD()라는 이름으로 제공한다. (위 버전은 정확하지 않음) 알고리즘은 sha1을 두번 사용한다고 한다. 그런데, MySQL 에서 password()를 이용해서 생성해보면 ( https://www.browserling.com/tools/mysql-password 에서 password를 생성가능) sha1(sha1('문자열')) 한 결과와 다르게 나온다. 찾아보니 이유는 sha1의 입력도 문자열, 출력도 문자열 인데 password함수는 sha1의 출력을 바이너리 그대로 sha1의 입력으로 넣는다. 아래 C코드를 보면 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #incldue<stdio.h> #include<openssl/sha.h> typedef unsigned char u8; int main ( int argc, char * argv[]){ u8 ibuf[ 20 ] = "abc" ; u8 obuf[ 20 ] = { 0 ,}; SHA1(ibuf, strlen(ibuf), obuf); SHA1(obuf, 20 , outbuf); for ( int i = 0 ;i < 20 ;i ++ ) printf( "%02x" , outbuf[i]); printf( " \n " ); return 0 ; } 이렇게 하면 MySQL의 password 함수와 동일한 결과를 얻을 수 있다. MySQL에서는 sha1(unhex(sha1('abc'...
댓글
댓글 쓰기