MD5¸¦ ÀÌ¿ëÇÑ ÆÄÀϺ¯Á¶°Ë»ç
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

ÆÄÀϺ¯Á¶°Ë»ç

1절. ¼Ò°³

ÇöÀç ÀÎÅͳÝÀÇ °¡ÀåÅ« À̽´´Â º¸¾ÈÀÌ´Ù. ÀÌ ¹®¼­´Â ÀÌ·¯ÇÑ º¸¾È¹®Á¦Áß È£½ºÆ®´Ü¿¡¼­ ÀϾ¼ö ÀÖ´Â ÆÄÀϺ¯Á¶¿Í °ü·ÃµÈ ¹®Á¦¿Í ±× ÇØ°áÀ» À§ÇÑ °£´ÜÇÑ ÇØ°áÃ¥À» Á¦½ÃÇØº¸°íÀÚ ÇÑ´Ù.

ÀÌ·¯ÇÑ ¹®Á¦ÀÇ ÇØ°áÀ» À§Çؼ­ MD5 ÇØ½¬ ¾Ë°í¸®Áò°ú STLÀÇ ¸î°¡Áö ÄÁÅ×ÀÌ³Ê¿Í ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ°Ô µÉ°ÍÀÌ´Ù.


2절. ÆÄÀϺ¸¾È

2.1절. ÆÄÀϺ¸¾ÈÀÇ Çʿ伺

ÀÏ´Ü Å©·¡Ä¿°¡ ¾î¶²¹æ¹ýÀ» ÅëÇØ¼­µçÁö Å©·¡Å·ÇϰíÀÚÇÏ´Â ¸ñÀû È£½ºÆ®¿¡ Á¢±ÙÇß´Ù¸é, ÀÌ Å©·¡Ä¿°¡ ´Ü¼øÇѸñÀû - ÀÓÀÇÀÇ ÆÄÀϵéÀ» ¹«ÀÛÀ§·Î »èÁ¦ÇѴٰųª, ´Ü¼øÈ÷ ÀÚ½ÅÀÇ ½Ç·Â À» Å×½ºÆ®ÇÒ¸ñÀû - ÀÌ ¾Æ´Ï¶ó¸é, Áö¼ÓÀûÀ¸·Î È£½ºÆ®¸¦ °¨½ÃÇϸ鼭 Áß¿ä µ¥ÀÌŸµéÀ» ¼öÁýÇϱ⸦ ¿øÇÒ°ÍÀÌ´Ù. ½ÉÇÒ°æ¿ì ƯÁ¤ ¸í·ÉÀ» ¼öÇàÇϸé(ls °°Àº) ¾Æ¿¹ ¸ðµç ÆÄÀÏÀÌ »èÁ¦µÇ¾î ¹ö¸®µµ·Ï ¸¸µé¼öµµ ÀÖÀ»°ÍÀÌ´Ù. ȤÀº ƯÁ¤ À¥ÆäÀÌÁö¸¦ º¯Á¶ÇÏ´Â ÀÛ¾÷µîÀ» ÇÒ¼ö Àִµ¥, ¾î¶² °æ¿ìÀÌ´øÁö °£¿¡ ±â¾÷¿¡ ÁÁÁö ¾ÊÀº °á°ú¸¦ ÃÊ·¡ÇÒ°ÍÀÌ´Ù.


2.2절. ÀÎÅÍ³Ý ¿¡¼­ÀÇ ÆÄÀϺ¸¾È

ƯÈ÷ ÀÎÅͳÝÀ» ÅëÇØ ÆÄÀÏÀ» ÁÖ°í ¹ÞÀ»°æ¿ì ÆÄÀÏÀÌ º¯Á¶µÇ¾ú´ÂÁö¸¦ È®ÀÎÇÏ´Â °ÍÀº ´õ¿í Áß¿äÇØÁø´Ù. APM [1] ¼³Ä¡¸¦ Çϱâ À§Çؼ­ ¾î¶² »çÀÌÆ®¿¡¼­ php½î¾²¸¦ ´Ù¿î¹Þ¾Ò´Ù°í ÇÏÀÚ. ±×·±µ¥, ÀÌ PHP½î¾²°¡ º¯Á¶°¡ µÇ¾î¼­ ¾ÇÀÇÀûÀÎ Äڵ尡 µé¾î°¡ ÀÖ´ÂÁö´Â 100% Àå´ãÇÒ¼ö ¾øÀ»°ÍÀÌ´Ù. ½ÉÁö¾î´Â php.net »çÀÌÆ®¿¡¼­ ¹Þ¾Ò´Ù°í ÇÏ´õ¶óµµ 100% ¾ÈÀüÇÑ ÄÚµå¶ó´Â°É È®ÀÎÇÒ¼ö ¾øÀ»°ÍÀ̸ç, ½ÇÁ¦·Î ½É½ÉÂú°Ô "¾î´À »çÀÌÆ®¿¡¼­ ¹ÞÀº ½î¾²´Â º¯Á¶µÇ¾îÀÖÀ½À¸·Î »ç¿ëÇϰí ÀÖÀ»°æ¿ì ¾÷µ¥ÀÌÆ® ½ÃŰ¼¼¿ä" ¶ó´Â º¸¾È °æ°í°¡ ÀÎÅÍ³Ý »ó¿¡ ¹ßÇ¥µÇ°ï ÇÑ´Ù. Æò¼Ò º¸¾È¹®Á¦¿¡ °ü½ÉÀ» °¡Áö°í ÀÖ¾ú´Ù¸é, sendmail "½î¾²°¡ º¯Á¶µÇ¾ú³×, ¾î¶² ½î¾²°¡ º¯Á¶µÇ¾úÀ¸´Ï ´Ù½Ã ¼³Ä¡ÇØ¾ß Çϳ×.." ÇÏ´Â º¸¾È¼Ò½ÄÀ» Á¢Çغ¸¾ÒÀ»°ÍÀÌ´Ù.

±×·¡¼­ ¿äÁò¿¡´Â ÀÎÅͳݻ󿡼­ ÆÄÀÏÀ» Àü¼ÛÇÒ°æ¿ì "md5 ¹®ÀÚ" ±îÁö¸¦ ÇÔ²² Àü¼ÛÇØ¼­ º¯Á¶µÈ ÆÄÀÏÀÌ ¾Æ´ÔÀ» È®ÀÎÇÒ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. md5 ´Â ´Ü¹æÇâ hash ¾Ë°í¸®ÁòÀ» Á¦°øÇØÁÖ´Â ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¸é ¾î¶°ÇÑ µ¥ÀÌŸ¿¡ ´ëÇØ¼­ 128 ºñÆ®ÀÇ Å©±â¸¦ °¡Áö´Â ¸Þ½ÃÁö Ãà¾àÀ» ¸¸µêÀ¸·Î½á µ¥ÀÌŸ¿¡ ´ëÇÑ ¹«°á¼ºÀ» °ËÁõÇÒ¼ö ÀÖ´Ù.

±×·³ ½ÇÁ¦ ¿¹¸¦ Çϳª µé¾îº¸µµ·Ï ÇϰڴÙ. www.php.net ¿¡ °¡¸é ¿©·¯°¡Áö ½î¾²ÆÄÀÏÀ» ¹èÆ÷Çϸ鼭 ½î¾²ÆÄÀÏ¿¡ ´ëÇÑ ¹«°á¼ºÀ» °ËÁõ½ÃÄÑÁÖ±â À§Çؼ­ md5 ¹®ÀÚ¿­±îÁö °°ÀÌ Á¦°øÇÑ´Ù. ¿©·¯ºÐÀÌ ÀÌ »çÀÌÆ®¿¡¼­ ¾î¶² ½î¾²ÆÄÀÏÀ» ¹Þ¾Ò´Âµ¥, °ú¿¬ ¿øº»±×´ë·ÎÀÇ ÆÄÀÏÀÎÁö¸¦ °ËÁõ¹Þ°í ½Í´Ù¸é, ÇØ´ç ÆÄÀÏ¿¡ ´ëÇÑ md5 ¹®ÀÚ¿­À» ¾ò¾î¼­ www.php.net ÀÇ md5 ¹®ÀÚ¿­°ú ÀÏÄ¡ÇÏ´ÂÁö¸¦ È®ÀÎÇÏ¸é µÈ´Ù.

ÇÊÀÚ´Â www.php.net ¿¡¼­ PHP 4.2.0 to 4.2.2 patch ¶ó´Â ÆÐÄ¡ÆÄÀÏÀ» ´Ù¿î·Îµå ¹Þ¾Ò´Ù. ´ÙÀ½Àº www.php.net ¿¡¼­ Á¦°øÇÏ´Â ÆÐÄ¡ÆÄÀϰú ÀÌ ÆÐÄ¡ÆÄÀÏ¿¡ ´ëÇÑ md5 °ªÀÌ´Ù.

PHP 4.2.0 to 4.2.2 patch [313Kb] - 22 July 2002
This unified diff will enable you to update your local PHP source to the latest version from 4.2.0.
md5: 254bccc245d65cece1f40f782b70ec6b 
			
À§ ÆÐÄ¡ÆÄÀÏÀÇ ¹«°á¼ºÀ» Á¡°ËÇÏ°í ½Í´Ù¸é ÀÎÅͳÝÀ» ÅëÇØ¼­ À§ÀÇ ÆÄÀÏÀ» ´Ù¿î·Îµå¹Þ°í, ´Ù¿î·Îµå ¹ÞÀº ÆÄÀÏ¿¡¼­ md5 Ãà¾à¸Þ½ÃÁö¸¦ ¾ò¾î³½ÈÄ, ¾ò¾î³½ ¸Þ½ÃÁö¿Í www.php.net ¿¡¼­ Á¦°øÇÑ md5 ¸Þ½ÃÁö¿Í ÀÏÄ¡ÇÏ´ÂÁö¸¦ È®ÀÎÇÏ¸é µÈ´Ù. ´ÙÀ½Àº ƯÁ¤ ÆÄÀÏ·Î ºÎÅÍ md5 Ãà¾à ¸Þ½ÃÁö¸¦ ¾ò¾î³»´Â °£´ÜÇÑ ÄÚµåÀÌ´Ù.

¿¹Á¦ : getmd5.c

#include <openssl/md5.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
    MD5_CTX lctx;
    unsigned char digest[16];
    char md5msg[40];
    int i;
    int fd;
    struct stat status;
    char *file_name = argv[1];
    char *data;

    MD5_Init(&lctx);

    fd = open(file_name, O_RDONLY);
    if (fd < 0)
    {
        perror("error : ");
        exit(0);
    }
    fstat(fd, &status);

    data = (char *)malloc(status.st_size);
    read (fd, data, status.st_size);

    MD5_Update(&lctx, data, status.st_size);
    MD5_Final(digest, &lctx);

    for (i = 0; i < sizeof(digest); ++i)
    {
        sprintf(md5msg+(i*2), "%02x", digest[i]);
    }
    printf ("%s\n", md5msg);
    free(data);
}
			
À§ ÄÚµå´Â Linux 2.4.x ¿î¿µÃ¼Á¦¿¡¼­ openssl ¿¡¼­ Á¦°øÇÏ´Â MD5 ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÄÚµùµÇ¾ú´Ù. ´ÙÀ½Àº ÄÄÆÄÀÏ ¹æ¹ýÀÌ´Ù. ÄÚµå´Â ´ÜÁö MD5 ÇÔ¼ö¸î°³¸¦ »ç¿ëÇÏ´Â °ÍÀÓÀ¸·Î Ưº°È÷ ¼³¸íÇÏÁø ¾ÊÀ»°ÍÀÌ´Ù. MD5 ¾Ë°í¸®Áò¿¡ ´ëÇÑ ³»¿ëµéÀº man ÆäÀÌÁö¿Í ÀÎÅͳÝÀÇ ´Ù¸¥ ¹®¼­µéÀ» Âü°íÇϱ⠹ٶõ´Ù.
gcc -o getmd5 getmd5.c -lssl -lcrypto
			
º¸Åë ÆÄÀÏ¿¡ ´ëÇÑ ¹«°á¼ºÁ¡°ËÀº ÆÄÀÏÀüü¿¡ ´ëÇØ¼­ ÀÌ·ç¾îÁüÀ¸·Î ÆÄÀÏÀ» open ÇÑÈÄ Àüü µ¥ÀÌŸ¸¦ ÀоîµéÀ̰í, ÀоîµéÀÎ µ¥ÀÌŸ¸¦ ÀÌ¿ëÇØ¼­ md5 Ãà¾à ¸Þ½ÃÁö¸¦ ¾ò¾î³½´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷À» À§Çؼ­ open(2), stat(2) ÇÔ¼öµéÀ» »ç¿ëÇß´Ù. ´ÙÀ½Àº À§ÇÁ·Î±×·¥À» ÀÌ¿ëÇØ¼­ Å×½ºÆ®ÇÑ °á°úÀÌ´Ù.
[root@localhost md5]# ./getmd5 php-4.2.0-to-4.2.2.patch.gz 
254bccc245d65cece1f40f782b70ec6b
			
www.php.net ¿¡¼­ Á¦°øÇÑ md5 ¹®ÀÚ¿Í Á¤È®ÇÏ°Ô ÀÏÄ¡Çϰí ÀÖÀ½À» È®ÀÎÇÒ¼ö ÀÖ°í, ÀÌ·³À¸·Î½á ÀÌ ÆÐÄ¡ÆÄÀÏÀÇ ¹«°á¼ºÀ» È®ÀÎÇÒ¼ö ÀÖ´Ù.

ÆÄÀÏÀÇ ³»¿ëÀÌ ´Þ¶óÁö¸é Á¤¸»·Î md5 °ªÀÌ ´Þ¶óÁö´ÂÁö È®ÀÎÇϱ⠿øÇÑ´Ù¸é À§ÀÇ ÇÁ·Î±×·¥À» ÀÌ¿ëÇØ¼­ ƯÁ¤ ÆÄÀÏÀ» º¯°æÀüÈÄÀÇ md5 °ªÀ» ºñ±³ÇÏ¸é µÉ°ÍÀÌ´Ù.


2.3절. ½Ã½ºÅÛ ÆÄÀÏ º¸¾È

½Ã½ºÅÛÆÄÀϺ¸¾È ¿ª½Ã ±âº»ÀûÀ¸·Î´Â À§ÀÇ ÀÎÅÍ³ÝÆÄÀÏ º¸¾È°ú °°Àº ¹æ¹ýÀ» ÀÌ¿ëÇØ¼­ ±¸Çö°¡´ÉÇÏ´Ù. º¸¾ÈÀÌ ÇÊ¿äÇÑ ÆÄÀÏÀÇ ¸®½ºÆ®¸¦ ¸¸µç´ÙÀ½¿¡ °¢ÆÄÀÏ¿¡ ´ëÇÑ MD5 ¹®ÀÚ¿­À» ¾òÀºÈÄ, ÀÌ µ¥ÀÌŸ¸¦ ÀúÀåÇØ ³õ°í, ÀÏÁ¤½Ã°£ °£°ÝÀ¸·Î ÆÄÀÏÀÇ ¸®½ºÆ®¿¡ ´ëÇÑ MD5 ¹®ÀÚ¿­À» °¡Á®¿Í¼­, óÀ½ ¸¸µé¾î ³õÀº MD5 ¹®ÀÚ¿­°ú ºñ±³ÇÏ¸é µÉ°ÍÀÌ´Ù.

 +----------------+----------------+       +----------------------------+
 | ÆÄÀÏ ¸ñ·Ï      | MD5 ¹®ÀÚ       | <---- | MD5 ÇØ½¬¸ñ·Ï ÀÛ¼º ÇÁ·Î±×·¥ |
 |---------------------------------|       +----------------------------+
 | /bin/login     | 347717f89a ... |
 | /bin/passwd    | 1629a99f6c ... |       +--------------------+
 | /usr/bin/httpd | d044f3d3ad ... | ----> | ÆÄÀÏ °Ë»ç ÇÁ·Î±×·¥ |
 | ...            | ...            |       +--------------------+
 +---------------------------------+
			


2.4절. ½Ã½ºÅÛÆÄÀÏ º¯Á¶ °Ë»ç ¾îÇø®ÄÉÀ̼Ç

ÀÌÁ¦ ¾î¶²½ÄÀ¸·Î ÆÄÀÏÀÇ º¯Á¶ À¯¹«¸¦ °Ë»çÇÒ¼ö ÀÖ´ÂÁö¿¡ ´ëÇÑ ±âº»ÀûÀÎ ¾ÆÀ̵ð¾î¸¦ ¾ò¾úÀ¸´Ï, ¾ÆÀ̵ð¾î¸¦ ÄÚµå·Î ±¸ÇöÇØº¸µµ·Ï ÇÏÀÚ. ÀÌ ¾ÆÀ̵ð¾î¸¦ ±¸ÇöÇϱâ À§Çؼ­ 2°³ÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ¸¸µé¾îÁú°ÍÀÌ´Ù.

¿ì¼±Àº °Ë»çÇϱ⠿øÇÏ´Â ½Ã½ºÅÛÆÄÀÏÀÇ ¸ñ·ÏÀ» ¸¸µé¾î¾ß ÇÒ°ÍÀÌ´Ù. ±×¸®°í ¸¸µç ÆÄÀϸñ·Ï¿¡ ´ëÇÑ MD5 ¹®ÀÚ¿­À» ±¸ÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ¸¸µé¾î¼­ ÆÄÀÏ·Î ÀúÀåÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.

´ÙÀ½Àº ½ÇÁ¦ ÆÄÀÏÀ» °Ë»çÇÏ´Â ÇÁ·Î±×·¥À¸·Î ÆÄÀÏ°Ë»ç ¸ñ·Ï¿¡¼­ ÆÄÀϸñ·Ï°ú ÆÄÀÏ¿¡ ´ëÇÑ MD5 ¹®ÀÚ¸¦ Àоîµé¿©¼­ ¸Þ¸ð¸®¿¡ ÀúÀåÇϰí, ÀÏÁ¤½Ã°£¸¶´Ù ÆÄÀϸñ·ÏÀÇ ÆÄÀÏ¿¡ ´ëÇÑ MD5 ¹®ÀÚ¿­À» ¾ò¾î¿Í¼­ ¿ø·¡ÀÇ MD5 ¹®ÀÚ¿­°ú ÀÏÄ¡ÇÏ´ÂÁö °Ë»çÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.

ÆÄÀÏ ¸ñ·Ï °Ë»ç¸¦ À§ÇÑ °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ÆÄÀÏ°Ë»ç ¸ñ·Ï°ú MD5 Á¤º¸¸¦ Àоîµé¿©¼­ vector µîÀ» ÀÌ¿ëÇØ¼­ ¹è¿­·Î ¸¸µé°í, ù¹øÂ° ¹è¿­ºÎÅÍ ¸¶Áö¸· ¹è¿­ÀÇ ÆÄÀϸñ·ÏÀ̸§À» °¡Á®¿Í¼­ ÀÌ ÆÄÀÏ¿¡ ´ëÇÑ MD5 °Ë»ç¸¦ ¼öÇàÇØ¼­ ¿øº» MD5 ¹®ÀÚ¿­°ú ºñ±³ÇÏ´Â ¹æ¹ýÀÏ °ÍÀÌ´Ù.


2.4.1절. ÆÄÀÏÀ̸§ & MD5 ¸ñ·ÏÀÛ¼º ÇÁ·Î±×·¥

°Ë»çÇÒ ÆÄÀÏÀ̸§ÀÌ µé¾îÀÖ´Â list.cfg ¸¦ Àоîµé¿©¼­ ÆÄÀÏ¿¡ ´ëÇÑ md5 ¹®ÀÚ¿­À» ¾ò¾î¿À°í, À̰ÍÀ» .listmd5.cfg ¿¡ ÀúÀåÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. list.cfg ´Â ´ÙÀ½°ú °°Àº ³»¿ëÀ» °¡Áø´Ù.

1.txt
2.txt
3.txt
4.txt
5.txt
				
´ÙÀ½Àº list.cfg ·ÎºÎÅÍ .listmd5.cfg ÆÄÀÏÀ» ¸¸µé¾î ³»´Â ÄÚµåÀÌ´Ù. °£´ÜÇÑ ÄÚµåÀÓÀ¸·Î ¼³¸íÀº ÁÖ¼®À¸·Î ´ë½ÅÇϰڴÙ.

¿¹Á¦ : makelist.cc

#include <openssl/md5.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <vector>

using namespace std;

#define LISTFNAME "list.cfg"
#define LISTFMDNAME ".listmd5.cfg"

#define chop(str) str[strlen(str) - 1] = '\0' 

typedef struct _filelist
{
    char filename[80];
    char md5[40];
} filelist;

int file2md5(char *, char *);
int main(int argc, char **argv)
{
    int i;
    FILE *fp;
    struct stat status;
    char *data;
    filelist md5info; 
    vector<filelist> vmd5info;
    char buf[80];
    char md5msg[40];

    // ¸®½ºÆ®¸¦ Àоî¿Í¼­ ÆÄÀÏ ¸ñ·ÏÀ» ¸¸µç´Ù. 
    if ((fp = fopen(LISTFNAME, "r")) == NULL)
    {
        perror("error : ");
        exit(0);
    }

    while(fgets(buf, 80, fp) != NULL)
    {
        chop(buf);
        // md5 ¹®ÀÚ¸¦ ¾ò¾î¿Â´Ù. 
        file2md5(buf, md5msg);
        strcpy(md5info.filename, buf);
        strcpy(md5info.md5, md5msg);
        // .listmd5.cfg ¿¡ ³»¿ëÀ» Àû´Â´Ù. 
        vmd5info.push_back(md5info);
    }
    fclose(fp);

    if ((fp = fopen(LISTFMDNAME, "w")) == NULL)
    {
        perror("error : ");
        exit(0);
    }

    for (int i = 0; i < vmd5info.size(); i++)
    {
        char listbuf[80];
        sprintf(listbuf, "%s:=%s\n", vmd5info[i].filename, vmd5info[i].md5);
        fputs(listbuf, fp);
    }
    fclose(fp);

}

// ÀÔ·ÂµÈ ÆÄÀÏ¿¡ ´ëÇÑ md5 ¹®ÀÚ¿­À» ¾ò¾î¿Â´Ù. 
int file2md5(char * file_name, char *md5msg)
{
    char *data;
    int fd;
    int i;
    struct stat status;
    unsigned char digest[16];
    char *x;
    MD5_CTX lctx;
    MD5_Init(&lctx);
    fd = open(file_name, O_RDONLY);
    if (fd < 0)
    {
        perror("error : ");
        exit(0);
    }    
    fstat(fd, &status);

    data = (char *)malloc(status.st_size);    
    read (fd, data, status.st_size);

    MD5_Update(&lctx, data, status.st_size);
    MD5_Final(digest, &lctx);

    for (i = 0; i < sizeof(digest); ++i)
    {
        sprintf(md5msg+(i*2), "%02x", digest[i]);
    }
    free(data);
    close(fd);
    return 1;
}
				
À§ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÑÈÄ ½ÇÇà½Ã۸é - ¹°·Ð ±×Àü¿¡ list.cfg ¿Í °Ë»çÇÒ ÆÄÀϵéÀ» ¹Ì¸® ÁغñÇØ¾ß ÇÑ´Ù - ´ÙÀ½°ú °°Àº .listmd5.cfg ÆÄÀÏÀÌ ¸¸µé¾îÁú°ÍÀÌ´Ù.
1.txt:=fb20e95d00a91f81936f84dc0fb3f770
2.txt:=c34f2efffd4a8079cec1aff2c5dc98f0
3.txt:=5da1f11dd590919eb2465151fbaad137
4.txt:=b3f56e50a03224ce395eb4c34c6322da
5.txt:=6ceadb3fae1a5a893b9c39dfa64e19b7
				


2.4.2절. ÆÄÀÏ º¯Á¶°Ë»ç ÇÁ·Î±×·¥

ÀÌÁ¦ º»°ÝÀûÀ¸·Î ÆÄÀϺ¯Á¶ °Ë»ç ÇÁ·Î±×·¥À» ¸¸µé¾î º¸ÀÚ. ÀÌ ÇÁ·Î±×·¥Àº .listmd5.cfg ÀÇ ³»¿ëÀ» ÀоîµéÀ̰í, ³»¿ë¿¡ ÀÖ´Â ÆÄÀÏÀ̸§¿¡ ´ëÇÑ MD5 ¹®ÀÚ¿­À» ¸¸µé¾î¼­ ³»¿ë¿¡ ÀÖ´Â MD5 ¿Í ³»¿ëÀÌ °°ÀºÁö¸¦ È®ÀÎÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ¿ª½Ã °£´ÜÇÑ ÄÚµåÀÓÀ¸·Î ¼³¸íÀº ÁÖ¼®À¸·Î ´ë½ÅÇÑ´Ù.

¿¹Á¦ : checklist.cc

#include <openssl/md5.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <vector>

using namespace std;

#define LISTFMDNAME ".listmd5.cfg"

#define chop(str) str[strlen(str) - 1] = '\0' 

typedef struct _filelist
{
    char filename[80];
    char md5[40];
} filelist;

int file2md5(char *, char *);
int main(int argc, char **argv)
{
    int i;
    FILE *fp;
    struct stat status;
    char *data;
    filelist md5info; 
    vector<filelist> vmd5info;
    char buf[80];
    char md5msg[40];
    vector<filelist>::iterator mi;

    // ¸®½ºÆ®¸¦ Àоî¿Í¼­ ÆÄÀÏ & md5 ¸Þ½ÃÁö ¸ñ·ÏÀ» ¸¸µç´Ù. 
    if ((fp = fopen(LISTFMDNAME, "r")) == NULL)
    {
        perror("error : ");
        exit(0);
    }

    while(fgets(buf, 80, fp) != NULL)
    {
        char null[3];
        chop(buf);
        sscanf(buf, "%[^:=]%[:=]%s",
                md5info.filename, null, md5info.md5);
        vmd5info.push_back(md5info);
    }
    fclose(fp);

    // ÆÄÀÏ º¯Á¶¸¦ °Ë»çÇÑ´Ù. 
    while(1)
    {
        int check = 1;
        mi = vmd5info.begin();
        while(mi != vmd5info.end())
        {
            printf("ÆÄÀϰ˻ç : %s, ", mi->filename); 
            if (file2md5(mi->filename, md5msg) < 0)
                printf("WARN : ÆÄÀÏ»èÁ¦", --check);
            else
                if (strcmp(mi->md5, md5msg) != 0)
                    printf("WARN : ÆÄÀϺ¯Á¶ %s => %s", mi->md5, md5msg, --check);
            *mi++;
            if (check == 1)
                printf("OK");
            printf("\n");

        }
        printf("\n");
        sleep(2);
    }
}

int file2md5(char * file_name, char *md5msg)
{
    char *data;
    int fd;
    int i;
    struct stat status;
    unsigned char digest[16];
    char *x;
    MD5_CTX lctx;
    MD5_Init(&lctx);
    fd = open(file_name, O_RDONLY);
    if (fd < 0)
    {
        return -1;
    }    
    fstat(fd, &status);

    data = (char *)malloc(status.st_size);    
    read (fd, data, status.st_size);

    MD5_Update(&lctx, data, status.st_size);
    MD5_Final(digest, &lctx);

    for (i = 0; i < sizeof(digest); ++i)
    {
        sprintf(md5msg+(i*2), "%02x", digest[i]);
    }
    free(data);
    close(fd);
    return 1;
}
				


2.4.3절. Å×½ºÆ®

¸ÕÀú Àû´çÇÏ°Ô list.cfg ¸¦ ¸¸µé°í ³ª¼­ makelist ¸¦ ½ÇÇà½ÃŲ´Ù. ±×¸®°í ³ª¼­ checklist ¸¦ ½ÇÇà½Ã۵µ·Ï ÇÑ´Ù.

[root@localhost md5]# ./makelist 
[root@localhost md5]# ./checklist 
ÆÄÀϰ˻ç : 1.txt, OK
ÆÄÀϰ˻ç : 2.txt, OK
ÆÄÀϰ˻ç : 3.txt, OK
ÆÄÀϰ˻ç : 4.txt, OK
ÆÄÀϰ˻ç : 5.txt, OK

...
				
ÀÌÁ¦ 1.txt ÆÄÀÏÀ» º¯°æÇϸé checklist ´Â 1.txt °¡ º¯Á¶µÇ¾ú´Ù´Â°É ¹ß°ßÇØ ³»°í WARN ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù.
ÆÄÀϰ˻ç : 1.txt, WARN : ÆÄÀϺ¯Á¶ fb20e95d00a91f81936f84dc0fb3f770 => 7e8d5617272c76ad7ef16a113f50ed79
ÆÄÀϰ˻ç : 2.txt, 
ÆÄÀϰ˻ç : 3.txt, 
				


3절. °á·Ð

ÀÌ»ó °£´ÜÇÏ°Ô ÆÄÀϺ¯Á¶¸¦ °Ë»öÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò´Ù. À§ÀÇ ³»¿ë¿¡ ´ëÇØ¼­ ÀÌÇØ¸¦ Çß´Ù¸é - ÀÌÇØÇÏ°í ¸»°Íµµ ¾ø´Â °£´ÜÇÑ ³»¿ëÀÌÁö¸¸ - ´Ù¾çÇÑ ¿ëµµ·ÎÀÇ ÀÀ¿ëÀÌ °¡´ÉÇÒ°ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀÀ¿ëÀº ¿©·¯ºÐÀÇ ¸òÀÌ µÉ°ÍÀÌ´Ù.

주석

[1]

"Apache À¥¼­¹ö" + "PHP ¼­¹ö»çÀÌÆ® ½ºÅ©¸³Æ®" + "Mysql DB" µîÀ¸·Î ÀÌ·ç¾îÁø À¥¼­¹öÀÇ Á¶ÇÕÀ¸·Î ¾Õ±ÛÀÚ¸¦ µû¼­ APM À̶ó°í ºÎ¸¥´Ù.

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.