혹시 OPEN API를 사용하면서 key value의 값으로 지정된 문자열을 고민해 보신적이 있으신가요? 무작위적으로 만들어진 것처럼 보이는 녀석들이요
보통 이런 모양이죠 'f5a779f2bb76053313358c7bea8d592t'

아무런 의미없이 만들어진게 아닐까 생각하실 수 있지만, 절대 그렇지 않습니다.
저런 녀석들은 대부분 '메시지 다이제스트(Message Digest)'를 사용했을 가능성이 큽니다.

메시지 다이제스트요?
각 메시지마다 고유하게 산출되도록 만든 간단한 문자열. 임의의 길이의 메시지를 단방향 해시 함수로 반복 적용하여 축약된 일정한 길이의 비트열로 만들어 표현한 것으로, 메시지(또는 문서나 문장)마다 단 하나의 메시지 다이제스트가 산출되고, 서로 다른 문서에서 같은 메시지 다이제스트가 산출될 수 없다. 따라서 원문의 변조 여부를 확인할 수 있는 일종의 체크섬(checksum)이다.

- 정보통신용어사전

겹치지 않은 값을 만들어 낸다는 것이죠. 보통 비밀번호를 저장할떄 이러한 방법을 많이 사용합니다. 그 중 많이 사용하는 것은 'md5'입니다. 이러한 값은 역으로는 계산될 수 없습니다. 따라서 관리자라고 하더라도 비밀번호를 알아낼 수는 없죠. 그래서 그들의 답변은 한결 같습니다.
'비밀번호를 리셋해서 메일로 보내드렸습니다. 확인하시고 비밀번호를 수정해주세요'
완벽한 암호화라고는 말 할수없습니다. 보통 이런 프로그램을 만들때 고유한 값을 만들어주기 위해서 많이 사용합니다. 리턴되는 사이즈가 항상 일정한 것이 장점입니다.

아참 md5는 메시지 다이제스트의 여러 알고리즘중 하나입니다.
MD5
RSA 암호 개발자 리베스트(Ronald Rivest)가 개발한 메시지 다이제스트 함수 알고리즘. RFC 1321에 규정되어 있다. 널리 사용되고 있는 알고리듬으로, 가장 일반적으로 사용되고 있는 간이 이메일 전송 프로토콜(SMTP) 서버 소프트웨어인 센드메일이나 도메인 네임 서버(DNS)의 사실상의 표준인 바인드(BIND) 소프트웨어 등의 인증에 사용된다. 일방향 해시 함수로서 임의 메시지를 압축, 고정 길이 해시값의 되돌림 처리는 32비트 단위로 한다. 주로 데이터의 오류 검출에 이용된다.
- 네이버 용어사전


저도 OPEN API를 만들일이 있어서 JSP로 도전해 봤습니다.
JSP - MD5 만들기...

<%@ page import="java.sql.*" %>
<%
 /* generate key - Start */
 StringBuffer sb = new StringBuffer();
 String apiKey = "고유한 문자열";
/* id나 e-mail정도면 고유한 문자열이 되겠죠 */
 byte[] digest = MessageDigest.getInstance("MD5").digest( apiKey.getBytes() );
 sb.setLength(0);
 for( int i = 0; i < digest.length; i++ ) {
  sb.append( Integer.toString( ( digest[i] & 0xf0) >> 4, 16 ) );
  sb.append( Integer.toString( digest[i] & 0x0f, 16 ) );
 }
 apiKey = sb.toString();
 /* generate key - End */
%>
- OKJSP.PE.KR 에서 눈팅을 많이 했습니다.
Posted by 달빛변신