HOME TIP & TECH

TIP & TECH

TIP & TECH More information
mysql(mariaDB) 의 password 함수의 결과를 postgresql 에서 구현하기

onionmixer 2024-11-15 11:50:31 119

mysql 의 password 함수는 2번의 sha1 암호화에 별표를 추가한 걸로 되어 있습니다. 일단 예제를 보시죠.

 

select password('asdlkjasd123!');
--> *514960EF6A8A7B1FB5341C77FBA8705CB7AE83E0

 

이 결과는  다음의 과정으로 만들어집니다.

 

SELECT SHA1('asdlkjasd123!');
--> c61cb86f628c8fdcc452b6abaa7d9f510d86730f

SELECT unhex(SHA1('asdlkjasd123!'));
--> binady data

SELECT SHA1(unhex(SHA1('asdlkjasd123!')));
--> 514960ef6a8a7b1fb5341c77fba8705cb7ae83e0

 

맨 앞쪽의 별표만 빼면 대충 어떻게 연산되는지가 보이죠? 순서는 다음과 같습니다.

  1. 1. 문자열을 SHA1 으로 인코딩합니다.
  2. 2. mysql 에서는 인코딩된 결과를 자동으로 hex(16진수 text)로 반환합니다. 이걸 다시 binary 데이터로 만들어요
  3. 3. 바이너리 데이터를 가지고 SHA1 으로 인코딩합니다.
  4. 4. 이 결과를 저장가능 하도록 hex text 로 변환합니다. 그리고 맨 앞쪽에 별표를 붙이면 완성!

 

자 이걸 postgreSQL 에서 대충 비번 형식으로 받아봅시다. 일단 쓰려면 postgreSQL 에서는 extension 의 설치가 필요합니다.

CREATE EXTENSION pgcrypto;

extenion 의 설치는 한번만 하면 되니까, 굳이 매번 호출할 필요는 없습니다. 여튼! 이걸 inline 으로 구현하면 다음과같은 결과가 됩니다.

SELECT concat('*',encode(digest((digest('asdlkjasd123!', 'sha1')), 'sha1'), 'hex'));

각 부분에 사용된 pgsql 함수에 대한 설명을 간단하게 해보겠습니다.

  • * digest 함수는 문자열을 주어진 인자의 알고리즘을 이용해 인코딩합니다. 이때 반환값은 binary 입니다.
  • * pgsql 에서는 encode 함수를 통해 binary 를 hex 또는 escape 문자열등으로 변환할 수 있습니다.
  • * mysql 의 암호화에서 문자열이 인코딩된 binary 값을 사용하기 때문에 그대로 digest 를 2번 사용하면 됩니다.
  • * 변환된 바이너리 값을 저장가능한 hex text 값으로 변환해줍니다.
  • * 최종적으로 concat 함수를 이용해서 hex text 값의 맨 앞쪽에 별표(*) 를 붙여서 출력합니다.

다들 아시는 별것 아닌 내용이겠습니다만.. 제가 기억하려고 기록삼아 남겨둡니다 :D

댓글 0개

Previous / Next
Next linux 와 hitel 단말기 serial 접속에 대한 팁 및 관련 정보링크