메뉴 건너뛰기

imp

[C++] md5 해시 만들기

lispro062014.07.20 02:09조회 수 1177댓글 0

    • 글자 크기

원래 해더 파일이 분리되어있는데, include 로 안 되서 걍 붙여 넣어 버렸다.

CString md5hash;

char sseed[100];

strRes="문자열";

sprintf( sseed, "%s", strRes);

md5hash=md5((LPSTR)(LPCSTR)sseed);


특정 문자열과 조합된 char 형태를 cstring 으로 해서 넣으면 cstring 타입으로 리턴 값을 얻을 수 있다.


#ifndef md5_INCLUDED

#  define md5_INCLUDED


/*

 * This package supports both compile-time and run-time determination of CPU

 * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be

 * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is

 * defined as non-zero, the code will be compiled to run only on big-endian

 * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to

 * run on either big- or little-endian CPUs, but will run slightly less

 * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.

 */


typedef unsigned char md5_byte_t; /* 8-bit byte */

typedef unsigned int md5_word_t; /* 32-bit word */


/* Define the state of the MD5 Algorithm. */

typedef struct md5_state_s {

md5_word_t count[2]; /* message length in bits, lsw first */

md5_word_t abcd[4]; /* digest buffer */

md5_byte_t buf[64]; /* accumulate block */

} md5_state_t;


#ifdef __cplusplus

extern "C" 

{

#endif


/* Initialize the algorithm. */

void md5_init(md5_state_t *pms);


/* Append a string to the message. */

void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);


/* Finish the message and return the digest. */

void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);


#ifdef __cplusplus

}  /* end extern "C" */

#endif


#endif /* md5_INCLUDED */



#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */

#ifdef ARCH_IS_BIG_ENDIAN

#  define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)

#else

#  define BYTE_ORDER 0

#endif


#define T_MASK ((md5_word_t)~0)

#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)

#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)

#define T3    0x242070db

#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)

#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)

#define T6    0x4787c62a

#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)

#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)

#define T9    0x698098d8

#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)

#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)

#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)

#define T13    0x6b901122

#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)

#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)

#define T16    0x49b40821

#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)

#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)

#define T19    0x265e5a51

#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)

#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)

#define T22    0x02441453

#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)

#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)

#define T25    0x21e1cde6

#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)

#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)

#define T28    0x455a14ed

#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)

#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)

#define T31    0x676f02d9

#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)

#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)

#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)

#define T35    0x6d9d6122

#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)

#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)

#define T38    0x4bdecfa9

#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)

#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)

#define T41    0x289b7ec6

#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)

#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)

#define T44    0x04881d05

#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)

#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)

#define T47    0x1fa27cf8

#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)

#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)

#define T50    0x432aff97

#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)

#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)

#define T53    0x655b59c3

#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)

#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)

#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)

#define T57    0x6fa87e4f

#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)

#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)

#define T60    0x4e0811a1

#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)

#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)

#define T63    0x2ad7d2bb

#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)



static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/){

md5_word_t

a = pms->abcd[0], b = pms->abcd[1],

c = pms->abcd[2], d = pms->abcd[3];

md5_word_t t;

#if BYTE_ORDER > 0

    /* Define storage only for big-endian CPUs. */

    md5_word_t X[16];

#else

    /* Define storage for little-endian or both types of CPUs. */

    md5_word_t xbuf[16];

    const md5_word_t *X;

#endif


{

#if BYTE_ORDER == 0

/*

* Determine dynamically whether this is a big-endian or

* little-endian machine, since we can use a more efficient

* algorithm on the latter.

*/

static const int w = 1;


if (*((const md5_byte_t *)&w)) /* dynamic little-endian */

#endif

#if BYTE_ORDER <= 0 /* little-endian */

{

   /*

* On little-endian machines, we can process properly aligned

* data without copying it.

*/

if (!((data - (const md5_byte_t *)0) & 3)) {

/* data are properly aligned */

X = (const md5_word_t *)data;

} else {

/* not aligned */

memcpy(xbuf, data, 64);

X = xbuf;

}

}

#endif

#if BYTE_ORDER == 0

else /* dynamic big-endian */

#endif

#if BYTE_ORDER >= 0 /* big-endian */

{

   /*

* On big-endian machines, we must arrange the bytes in the

* right order.

*/

const md5_byte_t *xp = data;

int i;


#  if BYTE_ORDER == 0

   X = xbuf; /* (dynamic only) */

#  else

#    define xbuf X /* (static only) */

#  endif

   for (i = 0; i < 16; ++i, xp += 4)

xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);

}

#endif

}


#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))


    /* Round 1. */

    /* Let [abcd k s i] denote the operation

       a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */

#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))

#define SET(a, b, c, d, k, s, Ti)

  t = a + F(b,c,d) + X[k] + Ti;

  a = ROTATE_LEFT(t, s) + b

    /* Do the following 16 operations. */

    SET(a, b, c, d,  0,  7,  T1);

    SET(d, a, b, c,  1, 12,  T2);

SET(c, d, a, b,  2, 17,  T3);

SET(b, c, d, a,  3, 22,  T4);

SET(a, b, c, d,  4,  7,  T5);

SET(d, a, b, c,  5, 12,  T6);

SET(c, d, a, b,  6, 17,  T7);

SET(b, c, d, a,  7, 22,  T8);

SET(a, b, c, d,  8,  7,  T9);

SET(d, a, b, c,  9, 12, T10);

SET(c, d, a, b, 10, 17, T11);

SET(b, c, d, a, 11, 22, T12);

SET(a, b, c, d, 12,  7, T13);

SET(d, a, b, c, 13, 12, T14);

SET(c, d, a, b, 14, 17, T15);

SET(b, c, d, a, 15, 22, T16);

#undef SET


     /* Round 2. */

     /* Let [abcd k s i] denote the operation

          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */

#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))

#define SET(a, b, c, d, k, s, Ti)

  t = a + G(b,c,d) + X[k] + Ti;

  a = ROTATE_LEFT(t, s) + b

     /* Do the following 16 operations. */

    SET(a, b, c, d,  1,  5, T17);

    SET(d, a, b, c,  6,  9, T18);

SET(c, d, a, b, 11, 14, T19);

SET(b, c, d, a,  0, 20, T20);

SET(a, b, c, d,  5,  5, T21);

SET(d, a, b, c, 10,  9, T22);

SET(c, d, a, b, 15, 14, T23);

SET(b, c, d, a,  4, 20, T24);

SET(a, b, c, d,  9,  5, T25);

SET(d, a, b, c, 14,  9, T26);

SET(c, d, a, b,  3, 14, T27);

SET(b, c, d, a,  8, 20, T28);

SET(a, b, c, d, 13,  5, T29);

SET(d, a, b, c,  2,  9, T30);

SET(c, d, a, b,  7, 14, T31);

SET(b, c, d, a, 12, 20, T32);

#undef SET


     /* Round 3. */

     /* Let [abcd k s t] denote the operation

          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */

#define H(x, y, z) ((x) ^ (y) ^ (z))

#define SET(a, b, c, d, k, s, Ti)

  t = a + H(b,c,d) + X[k] + Ti;

  a = ROTATE_LEFT(t, s) + b

     /* Do the following 16 operations. */

    SET(a, b, c, d,  5,  4, T33);

    SET(d, a, b, c,  8, 11, T34);

SET(c, d, a, b, 11, 16, T35);

SET(b, c, d, a, 14, 23, T36);

SET(a, b, c, d,  1,  4, T37);

SET(d, a, b, c,  4, 11, T38);

SET(c, d, a, b,  7, 16, T39);

SET(b, c, d, a, 10, 23, T40);

SET(a, b, c, d, 13,  4, T41);

SET(d, a, b, c,  0, 11, T42);

SET(c, d, a, b,  3, 16, T43);

SET(b, c, d, a,  6, 23, T44);

SET(a, b, c, d,  9,  4, T45);

SET(d, a, b, c, 12, 11, T46);

SET(c, d, a, b, 15, 16, T47);

SET(b, c, d, a,  2, 23, T48);

#undef SET


     /* Round 4. */

     /* Let [abcd k s t] denote the operation

          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */

#define I(x, y, z) ((y) ^ ((x) | ~(z)))

#define SET(a, b, c, d, k, s, Ti)

  t = a + I(b,c,d) + X[k] + Ti;

  a = ROTATE_LEFT(t, s) + b

     /* Do the following 16 operations. */

    SET(a, b, c, d,  0,  6, T49);

    SET(d, a, b, c,  7, 10, T50);

SET(c, d, a, b, 14, 15, T51);

SET(b, c, d, a,  5, 21, T52);

SET(a, b, c, d, 12,  6, T53);

SET(d, a, b, c,  3, 10, T54);

SET(c, d, a, b, 10, 15, T55);

SET(b, c, d, a,  1, 21, T56);

SET(a, b, c, d,  8,  6, T57);

SET(d, a, b, c, 15, 10, T58);

SET(c, d, a, b,  6, 15, T59);

SET(b, c, d, a, 13, 21, T60);

SET(a, b, c, d,  4,  6, T61);

SET(d, a, b, c, 11, 10, T62);

SET(c, d, a, b,  2, 15, T63);

SET(b, c, d, a,  9, 21, T64);

#undef SET


     /* Then perform the following additions. (That is increment each

        of the four registers by the value it had before this block

        was started.) */

    pms->abcd[0] += a;

    pms->abcd[1] += b;

pms->abcd[2] += c;

pms->abcd[3] += d;

}


void md5_init(md5_state_t *pms)

{

pms->count[0] = pms->count[1] = 0;

pms->abcd[0] = 0x67452301;

pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;

pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;

pms->abcd[3] = 0x10325476;

}


void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes){

const md5_byte_t *p = data;

int left = nbytes;

int offset = (pms->count[0] >> 3) & 63;

md5_word_t nbits = (md5_word_t)(nbytes << 3);


if (nbytes <= 0)

return;


/* Update the message length. */

pms->count[1] += nbytes >> 29;

pms->count[0] += nbits;

if (pms->count[0] < nbits)

pms->count[1]++;


/* Process an initial partial block. */

if (offset) {

int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);


memcpy(pms->buf + offset, p, copy);

if (offset + copy < 64)

return;

p += copy;

left -= copy;

md5_process(pms, pms->buf);

}


/* Process full blocks. */

for (; left >= 64; p += 64, left -= 64)

md5_process(pms, p);


/* Process a final partial block. */

if (left)

memcpy(pms->buf, p, left);

}


void md5_finish(md5_state_t *pms, md5_byte_t digest[16]){

static const md5_byte_t pad[64] = {

0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

};

md5_byte_t data[8];

int i;


/* Save the length before padding. */

for (i = 0; i < 8; ++i)

data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));

/* Pad to 56 bytes mod 64. */

md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);

/* Append the length. */

md5_append(pms, data, 8);

for (i = 0; i < 16; ++i)

digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));

}


CString md5(const CString strMd5)

{

    md5_state_t state;

    md5_byte_t digest[16];

    char hex_output[16*2 + 1];

    int di;


    md5_init(&state);

md5_append(&state, (const md5_byte_t *)(LPSTR)(LPCSTR)strMd5, strMd5.GetLength());

    md5_finish(&state, digest);


    for (di = 0; di < 16; ++di)

        sprintf(hex_output + di * 2, "%02x", digest[di]);

    return hex_output;

}

lispro06 (비회원)
    • 글자 크기

댓글 달기

20대 CEO - 박이빛

[원문보기]





파코메리 여성CEO 초청 강연
'대한민국 20대의 꿈과 성공' 주제로 최연소 월스트리트 진출 여성CEO 박이빛씨 강연

㈜파코메리(대표 박형미)는 지난 10일, 교육계 최연소 여성 CEO이자 교육 컨텐츠 분야 여성 CEO 최초로 미국 월스트리트에 진출한 박이빛 씨를 초청 '대한민국 20대의 꿈과 성공'이라는 주제로 강연회를 가졌다.

전국 주요지역 31개 직영점장 및 사원 5백여명을 대상으로 열린 이번 강연회에서 박이빛 씨는 현 시대를 속도, 지식, 신뢰의 시대로 규정하면서 “내 분야가 아니더라도, 나는 내가 내 몸을 투자했을 때 승리를 맛보는 그 쾌락에 승부수를 던진다"며 "경영자는 반드시 자신이 무엇을 원하고 무엇을 원하지 않는가를 정당화할 필요는 없다. 그러나 강하게 원하게 될 때가 있다, 그 때 시작을 해야 뭐든 이뤄낼 수 있다”고 강조했다. 또한 “강하게 신념을 가지는 그것, 그것을 책임질 수 있다면 지금 당장 시작하라”고 주문했다.

또 사람을 다루고 사람을 경영하는 자신만의 생각에 대해 박이빛 씨는 그것을 ‘안전거리’라고 규정했다.

박 CEO는 “우리는 사람이기 때문에 누구나 실패를 할 수 있다고 생각하며 살아야 한다. 그래서 필요한 것이 맨 마지막에 물러설 수 있는 공간, 즉 안전거리를 꼭 확보해 놓아야 한다는 것이다. 맨 마지막에 정말 남는 것은 내 주변의 ‘사람’이다. 돈도 아니고 명예도 아니고 바로 사람이다. 진정한 사람을 곁에 두는 사람은, 돈과 명예가 탐나지 않는다. 그럴 때 비로소 성공 이란 것이 찾아온다.”고 역설했다.

박형미 사장은 박이빛 씨에 대해 “공정한 원칙과 룰 속에서 승부욕이 강하고 진정한 자신만의 투자 방법을 체득한 박이빛 씨야말로 파코메리가 추구하는 미래지향적 투명한 파코메리 시스템과 일치한다”고 소감을 밝혔다.

박이빛 씨는 연봉 2천4백만원의 학원 강사로 시작한 지 5년 만에 10억원의 연봉을 받는 교육분야 최초의 여성 CEO로서 자신의 이름을 건 이빛에듀 뉴욕지사를 지난 7월 7일 월스트리트 중심가에 오픈해 세간의 화제가 됐다

PSAT(Public Service Aptitude Test)

[원문보기]

공기업 채용때 PSAT 도입


 



[서울신문]이르면 올 하반기부터 공공기관 채용시험에도 공직적성평가(PSAT)가 도입될 전망이다.


또 PSAT와 같은 직무능력 검사 비중이 높아지고, 토익·토플 등 어학 성적 비중은 떨어진다.


기획예산처는 1일 이같은 내용의 ‘공공기관 채용방식 개선방안’을 마련, 올 하반기부터 적용한다고 밝혔다.


대상 기관은 우선 101개 공기업·준정부기관이며,197개 기타공공기관으로도 확대할 계획이다.


개선 방안에 따르면 어학 성적은 지원을 위한 최소한의 자격 기준으로만 활용된다. 어학시험 성적이 최종 합격의 결정적 기준이 되면 우수한 인재를 놓칠 수 있다는 판단에서다.


대신 직무능력검사가 도입되고, 면접이 강화된다. 특히 직무능력 검사과목으로는 PSAT 또는 PSAT와 유사한 모델이 검토되고 있다.


기획처 관계자는 “중앙인사위원회와 협의를 거쳐 이르면 올 하반기부터 희망 기관에 한해 PSAT를 활용할 수 있도록 지원할 계획”이라면서 “이와는 별도로 PSAT와 유사한 형태의 직무능력검사 모델 개발도 검토할 것”이라고 설명했다.


또 각 기관들은 국가 유공자, 장애인, 여성, 지방 인재 등에 대한 목표 채용 비율을 스스로 설정, 준수토록 할 방침이다. 이와 함께 오는 6월 말까지 각 기관들은 올 하반기 채용 규모·시기·방법 등의 정보를 ‘공공기관 경영정보 공개시스템’에 공개한다.


장세훈기자 shjang@seoul.co.kr


■ 용어 클릭


●PSAT(Public Service Aptitude Test) 공직 수행에 필요한 기본 지식과 소양, 자질 등을 평가하는 시험이다.2004년 외무고시 1차시험에 처음 적용됐으며, 올해부터 행정·외무·입법고시 등 모든 국가고시 1차 시험에도 채택됐다. 언어논리·자료해석·상황판단 등 3개 영역으로 구성돼 있다.

economist에 광고하는 Korea Air Line

[원문보기]
 금호 아시아나는 봉사활동 하던데......

 항공사들이 눈에 들어온다.

zbxe 작업일지

[원문보기]
1. 설치
2. /zbxe/widgets/login_info/skins/xe_official/login_form.html 수정
  - 오픈아이디만 사용할 수 있도록 수정함.
3. 플래닝 페이지를 외부 페이지 생성 메뉴를 이용해 등록
4. /zbxe/widgets/login_info/skins/xe_official/login_info.html 수정
  - 플래닝 페이지 링크 생성
5. create.php 생성
  - 해당 플랜에 대한 폴더를 생성하는 page
6. create.php에 unlink 추가
  - 해당 플랜 삭제시 이용 루틴(inst변수를 이용하여 식별)
7. syn_sch 파일 수정
  - 인코딩 문제가 발생하여 넘겨주는 변수와 내부 sql을 수정(숫자로 전송)

zbxe 작업일지(2일차)

[원문보기]
1. 레이아웃(plan) 생성 및 편집
  - 플래닝 페이지 용 레이아웃 등록
2. design.htm 생성 및 연결
  - 변수를 재활용 할 수 없으므로, iframe형태로 home.php를 로딩함
3. insert.php 작성
  - 커리어플랜(여러 인물 적용 가능) 및 기타 플랜 db삽입/삭제/열람 기능 연동

php XML파서

[원문보기]

<xml.php>

$file = "cultlife.xml";
function trustedFile($file)
{
// only trust local files owned by ourselves
if (!eregi("^([a-z]+)://", $file) && fileowner($file) == getmyuid())
{
return true;
}
return false;
}
function startElement($parser, $name, $attribs)
{
  print "&lt;<font color=#0000cc>$name</font>";
if (sizeof($attribs)) {
/*while (list($k, $v) = each($attribs)) {
print "<font color=#009900>$k</font><font color=#990000>$v</font>";
} */
}
print "&gt;";
}
function endElement($parser, $name)
{
print "&lt;/<font color=#0000cc>$name</font>&gt;<br>";
}
function characterData($parser, $data)
{
print "<b>$data</b>";
}
function PIHandler($parser, $target, $data)
{
switch (strtolower($target)) {
case "php":
global $parser_file;
// If the parsed document is "trusted", we say it is safe
// to execute PHP code inside it. If not, display the code
// instead.
if (trustedFile($parser_file[$parser])) {
eval($data);
} else {
printf("Untrusted PHP code: <i>%s</i>", htmlspecialchars
($data));
}
break;
}
}
function defaultHandler($parser, $data)
{
if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
printf('<font color="#aa00aa">%s</font>', htmlspecialchars
($data));
} else {
printf('<font size="-1">%s</font>', htmlspecialchars($data));
}
}
function externalEntityRefHandler($parser, $openEntityNames, $base,
$systemId,
$publicId)
{
if ($systemId) {
if (!list($parser, $fp) = new_xml_parser($systemId)) {
printf("Could not open entity %s at %sn", $openEntityNames,
$systemId);
return false;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
printf("XML error: %s at line %d while parsing entity %
sn",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser),
$openEntityNames);
xml_parser_free($parser);
return false;
}
}
xml_parser_free($parser);
return true;
}
return false;
}
function new_xml_parser($file) {
global $parser_file;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_set_processing_instruction_handler($xml_parser, "PIHandler");
xml_set_default_handler($xml_parser, "defaultHandler");
xml_set_external_entity_ref_handler
($xml_parser, "externalEntityRefHandler");


if (!($fp = @fopen($file, "r"))) {
return false;
}
if (!is_array($parser_file)) {
settype($parser_file, "array");
}
$parser_file[$xml_parser] = $file;
return array($xml_parser, $fp);
}
if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
die("could not open XML input");
}
print "<pre>";
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %dn",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
print "</pre>";
print "parse completen";
xml_parser_free($xml_parser);


<xmltest.xml>

<?xml version='1.0'?>
<!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [
<!ENTITY plainEntity "FOO entity">
<!ENTITY systemEntity SYSTEM "xmltest2.xml">
]>
<chapter>
<TITLE>Title &plainEntity;</TITLE>
<para>
<informaltable>
<tgroup cols="3">
<tbody>
<row><entry>a1</entry><entry
morerows="1">b1</entry><entry>c1</entry></row>
<row><entry>a2</entry><entry>c2</entry></row>
<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
&systemEntity;
<sect1 id="about">
<title>About this Document</title>
<para>
<!-- this is a comment -->
<?php print 'Hi! This is PHP version '.phpversion(); ?>
</para>
</sect1>
</chapter>

<xmltest2.xml>

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY testEnt "test entity">
]>
<foo>
<element attrib="value"/>
&testEnt;
<?php print "This is some more PHP code being executed."; ?>
</foo>

zbxe 작업일지(3일차)

[원문보기]
1. simple.php 제작
  - 보기 모드
  - '플래닝 보기' 페이지에 링크 추가
2. mashup 페이지 제작
  - 최근 게시글 출력(자신글, 관련글)

창업일지 - 사업자등록 및 통신판매업신고

[원문보기]
 1. 사업자 등록은 주업종, 주업태 선정 외에는 어려운 점이 없었다. 일반과세자로 등록되었으며, 접수자와의 의견 교환이 종료되면 대기자가 없을시 1분이내에 발급된다.
  -> 장소 : 세무서

 2. 통신판매업신고는 구청 지역경제과에서 하였으며, 여러가지 확인절차(세금 채납 등)을 거쳐 신청을 완료하였다. 사업자등록증과 신분증만 있으면 된다.

창업일지 - 통신판매업신고증 수령 및 부가통신사업신고

[원문보기]
 1. 구청 지역경제과에서 문자를 받고 '면허세' 45000원을 지로형태의 고지서를 통해 은행에 제출하였다. 간이과세자는 면제 받는다. 영수증을 보여주면 간단한 확인 절차를 거치고 수령할 수 있다.

 2. 부가통신사업신고는 정보통신부(www.mic.go.kr)에서 갖가지(?) Active-x 컨트롤러를 설치하면, 온라인으로 간단히 신청가능하고, 등기로 받아볼 수 있다. 1800원정도 나온다.(빠른 등기는 500~1000원 정도 추가 과금)

 % 도메인 포워딩이 완료되었다. 페이지 작업을 해야하는데...

zbxe 작업일지(4일차)

[원문보기]
1. home.php 예외처리
  - 외부경로(zbxe 밖에서 접근)

1-1. design.html 예외처리
  - 로그인하지 않은 사용자의 호출

2. simple.php 예외처리
  - 존재하지 않는 (srl값 호출)시

2-1. 기본 레이아웃(xe_official) 편집
  - 커리어플랜의 보기/편집/삭제 모드로 3분류

zbxe 작업일지(5일차)

[원문보기]
1. xml parser 연동
  - urlencode()를 이용해 query를 넘겨 FEED ON FEEDS라이브러리 이용
  - 도서 api 2차 키워드 지원

2. naver 상호검색 api 연동
  - zbxe.php에 FEED ON FEEDS라이브러리 이용

3. write_form.php, simple.php 수정
  - 작성자의 태그와 작성 대상 키워드 태그 적용(글쓰기 가능)

워크넷(한국고용정보원)의 직업적성검사결과

[원문보기]
1시간 이상이 걸려서 18개 항목의 검사를 받았다.

예상대로 객관성이 결여된 정확하지 않은 정보가 나왔다.

책을 많이 읽고 있는터라 언어력과 추리력이 높게 나왔고, 계산을 소홀이 하고 있기에 계산력이 부진했다. 선호 직업에 대한 평가에서는 무리가 없는 것으로 나왔다. 결론이 무엇인가? 하고 싶은 것을 하라는 거지 뭐....

zbxe 작업일지(6일차)

[원문보기]
1. zbxe.php파일의 예외처리
   - table이 존재하지 않을 때(유저 srl이 올바르지 않을 때) exit();

2. zbxe에 api 추가
   - 네이버 맵 api
   - 다음 동영상 api

3. 페이지 추가
   - 광고 안내
   - 메뉴 제작

창업일지 - 부가통신사업신고필증 수령

[원문보기]
1. 정보통신부 인터넷 민원을 통해 서울 체신청으로 부터 수령하였다.

zbxe 작업일지(7일차)

[원문보기]
1. file 업로드 추가
  - upload.php , upload_e.php

2. file 업로드 예외처리
  - jpg, JPG만 가능
  - 1K이하만 가능

3. opener.location.reload(); 명령어 적용
  - popup을 일으킨 대상 프레임의 릴로드

zbxe 작업일지(8일차)

[원문보기]
1. syn.php 생성
  - while문으로 배열 fetch를 이용한 code 효율화
  - syn되어 있는 user의 plan load 및 출력
  - path color의 저장 값 사용

zbxe 작업일지(9일차)

[원문보기]
1. planning.php 수정
  - login 정보가 없으면, planning관련 메뉴 숨김

2. syn.php 개선
  - syn 노드이면, syn 노드 끼리 동기화
  - syn 노드의 내용은 visibility를 hidden으로 설정
  - syn 노드 user의 내용은 visibility를 사용자(syn user)로 표시
  - extmul을 이용한 확장

매트랩 구현 사전 학습

[원문보기]
Σa_n Sin(N x X)의 계산
n은 1, 3, 5로 했으며,
-90에서 501도까지를 rad로 환산하여 계산하였다.

결과값은 img와 같이 얻었다.

홀수의 N만 넣으면, 구형파와 유사한 모양을 띤다.

img는 excel chart이다.

sin x + (sin 3x) / 2 + (sin 5x) / 5 의 그래프.

zbxe 작업일지(10일차)

[원문보기]
1. syn_sch.php 수정
  - 검색결과를 보여주고, 결과로 나온 유저의 플랜 링크 수정
2. planning.php와 xe_official 내용 수정
  - 합성도 보기 메뉴와 mid값에 따른 보여주기 결과 표시.
3. simple.php 수정
  - vector의 색을 설정 값에 따른 색으로 보여줌.
첨부 (0)
위로