Thinking Different





서버와 클라이언트의 간단한 인증 소스가 필요해서 알아보던 중에 클라이언트 고유 ID가 뭐가 있을까 생각을 해봤는데 처음 생각한건 MAC 주소를 이용한 인증 방법이 있겠고, 다른것으로 GUID를 생성해서 GUID를 서버와 클라이언트의 간단한 인증으로 사용하려고 생각한 것이다

COM / ATL 코딩시에 GUID를 사용하게 되는데 GUID를 생성하기 위해서 guidgen.exe나 cuidgen.exe 툴을 이용해서 GUID를 얻을수 있는데, 그 툴의 모티브(?)가 되는 소스코드를 통한 방법이다... 해당 툴도 이 소스로 만들어졌으리라 생각된다.  소스는 몇줄 안된다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 필요한 헤더와 라이브러리를 추가
#include "stdafx.h"
#include <Rpc.h>
#pragma comment(lib, "Rpcrt4.lib")
 
int _tmain(int argc, _TCHAR* argv[])
{
    // UUID 변수
    UUID id;
 
    // UUID를 하나 생성한다
    if(RPC_S_OK != UuidCreate(&id))
        id = GUID_NULL;
    
    // UUID 값을 문자열로 변경한다(0xab, 0x12... 이런식으로 되어있음)
    // UUID 변경시 주의점으로 유니코드로 생성되며 유니코드로 출력하지 않으려면 MBCS로 변경해줘야 된다
    TCHAR szIID[129];
    wchar_t wszIID[129];
 
    // GUID에서 문자열로 변경한다(유니코드로 변경됨)
    int r = ::StringFromGUID2(id, wszIID, 128);
 
    // WBCS에서 MBCS로 변경(유니코드->멀티바이트)
    ::wcstombs(szIID, wszIID, 128);
 
    // 문자로 출력
    cout << szIID << endl;
 
    return 0;
}
 

 
아래는 결과 화면