Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


MD5¸¦ ÀÌ¿ëÇÑ ½ºÆ®¸µ º¯È¯
 
´ëÇ¥ÀûÀÎ Çؽ¬ÇÔ¼öÀÎ Message Digest¾Ë°í¸®ÁòÀ» ÀÌ¿ëÇÑ ½ºÆ®¸µº¯È¯À» ¿¹Á¦·Î º¸ÀÚ ( 2003/11/25 ) 164
Written by ienvyou - ÃÖÁö¿õ
1 of 1
 

¿©·¯ºÐ Á¤¸» ¿À·£¸¸ÀÔ´Ï´Ù. ³î»õ~ÀÔ´Ï´Ù. ¿äÁò ÀÎÅͳÝÀ» µÚÁ®ºÃ´õ´Ï ¿ø ³î»õ¶õ ´ëÈ­¸íÀ» ¾²´Â Àΰ£µéÀÌ
¿öÂ ¸¹´øÁö ¿ø~ ½ºÅ͵𸦠½ÃÀÛÇÏ°í ³ª¼­ 3°³¿ùÀÌ Áö³µ´Âµ¥ ¾Æ±Ã~ À̳ðÀÇ ÇÁ·ÎÁ§Æ®¶§¹®¿¡ ¾ÆƼŬÀº
¾ÆƼŬ´ë·Î ¸ø¾²°í ½ºÅ͵ð´Â ½ºÅ͵ð´ë·Î ¸øÇÏ°í ÀÖ¾ú½À´Ï´Ù. ÇÁ·ÎÁ§Æ®±âÁØ¿¡ ¸ÂÃß¾î ¿©·¯ »ç¶÷µéÀÌ 
µû¶ó°¡ ÁÖ±â´Â Çϴµ¥ ¸Ç³¯ ÀÌ »êÀ¸·Î µî¹ÝÀ» ÇÏ°í ³ª¼­´Â "¾î¶ó? ÀÌ»êÀÌ ¾Æ´Ñ°³º­~" ¶ó°í ÇѸ¶µðÇÏ°í
¿ø»óº¹±Í^^  ¸î¹ø ¹Ýº¹ÇÏ°í ´ë·« 3ÁÖÁ¤µµ ¹ã»õ´Ù º¸´Ï ÀÔ¿¡´Â 18¼Ò¸®¸¦ ¸Ç³¯ ¹°°í »ç´Â óÁö°¡ µÇ¾ú³×¿ä.

Áö±Ý ÀÌ ±Û¾²´Â ½Ã°£µµ ¹ã 12½Ã°¡ ³Ñ¾î¼­ ´ÙÀ½³¯ »õº®À¸·Î ¿­½ÉÈ÷ ½Ã°è¹Ù´ÃÀÌ À̵¿ÇÏ°í ÀÖ´Â ½ÃÁ¡ÀÔ´Ï´Ù.
ÀÏÇϱⰡ Á¤¸» ½È°í, ³î±¸ ½Í°í..¤¾¤¾ À̸¦ ¿ìÂîÇϸé ÁÁÀ»±î¿äÀÌ~~

ÀÚ~ Áö±Ý±îÁö´Â Ǫ³äÀ̾ú°í ¿À´Ã ¾²°Ô µÇ´Â ¾ÆƼŬÀº º¸Åë »çÀÌÆ®¿¡¼­ Æнº¿öµå¸¦ ÀúÀåÇÏ·Á°í ÇÒ¶§
¾ÏȣȭÇؼ­ ³Ö´Â ¹æ¹ýÁßÀÇ MD5(Message Digest)¸¦ ÀÚ¹Ù·Î ±¸ÇöÇÏ¿© Áý¾î³Ö´Â °ÍÀ» ¸¸µé·Á°í ÇÕ´Ï´Ù.
º¸ÅëÀÇ ±ÝÀ¶±ÇÀÇ »çÀÌÆ®µéÀ̳ª ÀϹݻçÀÌÆ®µéÀº ±ÝÀ¶°¨µ¶¿ø¿¡¼­ ISMS¶ó°í Çؼ­ º¸¾ÈÁ¤Ã¥À» ÇÏ´ÞÇÏ¿©
"ÀÌ°Í´ë·Î ¾È¸¸µé¸é Á×´ÂÁÙ ¾Ë¾î~"¶ó´Â ÁöħÀÌ Çϴ޵Ǵµ¥ ±× ±âÁØÀ» ¸ÂÃß±â À§ÇÏ¿© ÀÌ¹Ì ¾Æ·¡ÀÇ 
¾ÆƼŬ¿¡¼­ ¼³¸íÀÌ µÇ¾ú¾ú´ø ¾ÏȣȭµîÀÇ ¹æ½ÄÀ» Àû¿ëÇÑ H/W or S/W¸¦ ¼³Ä¡ÇÏ¿© ±× ±âÁØ¿¡ ºÎÇÕÇÏ°Ô 
Àû¿ëÀ» ÇÏ°Ô µË´Ï´Ù.

À§¿¡¼­ À̾߱âÇÑ MD5´Â ¶Ç ¾îµð¼­ ºÃÀ»±î¿ä? ¾î? ¸øºÃ¾î¿ä? ¸®´ª½º¿¡ Á¶±Ý¸¸ °ü½ÉÀÌ ÀÖ´Ù´øÁö ½Ã½ºÅÛÀ»
Á¶±Ý ¾È´Ù°í ÇÑ´Ù¸é º¸ÅëÀÇ unix¿î¿µÃ¼Á¦¿¡¼­ MD¾î¼±¸ Àú¼±¸ ¶ó°í º¸¼ÌÀ»ÅÙµ¥.. 
¾Æ±¸~ ¸¸¾à ¸øº¸¾Ò´Ù¸é °øºÎÁ» ¿­½ÉÈ÷ ÇÏ¼Å¾ß °Ú½À´Ï´Ù. 

±×·³ ¾ÆÆÄÄ¡¿¡¼­ »ç¿ëÀÚ ÀÎÁõÀ» À§ÇÑ htpasswd´Â º¸¼Ì³ª¿ä? µð·ºÅ丮¿¡ user¸®½ºÆ®µîÀ» °É¾î¼­ ÇØ´ç 
»ç¿ëÀÚ¿¡ ´ëÇÑ Á¢±ÙÀ» ½ÃµµÇϵµ·Ï ÇÏ´Â °Å ¸»ÀÌÁÒ~ ¾î¶ó? À̰͵µ ±¸°æ¸øÇغôٱ¸¿ä? 

È«.... ±×·³ ÁøÂ¥ ½ÖÄÚÇÇÅÍÁö°Ô °øºÎÇÏ¼Å¾ß °Ú±º¿ä. Çϱâ»ç ÀÌ·±°Í ¸ô¶óµµ ¸Ô±¸ »ç´Âµ¥ ÁöÀåÀº ¾ø½À´Ï´Ù¸¸
±×·¡µµ ¾È´Ù¸é ¾îµð°¡¼­ ¾Æ´Â ôÀº ÇÒ¼öµµ ÀÖ°ÚÁö¿ä.

ÀÚ ±×·³ ´ëü MD5°¡ ¹«¾ùÀÎÁö¸¦ ¾Ë°í¼­ ³Ñ¾î°¡¾ß ¿Ö ¾²´ÂÁö¸¦ ¾Ë¼ö ÀÖ°ÚÁö¿ä? ¾Ë¾Æº¾½Ã´Ù.

¢º MD2, MD4, MD5¶õ ¹«¾ùÀΰ¡? 

MD2, MD4, MD5´Â Rivest°¡ °³¹ßÇÑ ¸Þ½ÃÁö ¿ä¾à ¾Ë°í¸®ÁòÀ̸ç, 128ºñÆ®ÀÇ ¸Þ½ÃÁö ¿ä¾àÀ» »ý¼ºÇسÀ´Ï´Ù.
MD2´Â 8ºñÆ® ÄÄÇ»ÅÍ¿ëÀ¸·Î ÃÖÀûÈ­µÇ¾ú°í, Md4¿Í Md5´Â 32ºñÆ® ÄÄÇ»ÅÍ¿ëÀ¸·Î µÇ¾îÀִٴ Ư¡À» 
°¡Áö°í ÀÖ½À´Ï´Ù. ¾ê³×µé °°Àº °æ¿ì´Â ´ëÇ¥ÀûÀÎ Çؽ¬ÇÔ¼öÃø¿¡ Æ÷ÇԵǾîÁ® Àִµ¥, Çؽ¬ÇÔ¼ö¶õ³ðÀº 
ÀÚ¹Ù¿¡¼­Ã³·³  ½ºÆ®¸µÀ» ÀÏÁ¤ÇÑ ±æÀÌÀÇ Çؽ¬ÄÚµå·Î Ãâ·ÂÀ» ³»º¸³»°Ô µÇ´Âµ¥ ¾êµéÀº µÎ°¡Áö ¼ºÁúÀ» 
¸¸Á·ÇØ¾ß Çϴ Ư¡À» °¡Áö°í ÀÖ½À´Ï´Ù.
ù°·Î ¸¸µé¾îÁø Çؽ¬Äڵ带 º¸°í ÇØ´ç Çؽ¬Äڵ带 ¸¸µé¾ú´ø ½ºÆ®¸µÀ» ã¾Æ³»Áö ¸øÇØ¾ß Çϸç, 
µÎ¹ø°´Â ÁÖ¾îÁø ½ºÆ®¸µ¿¡ ´ëÇÏ¿© °°Àº Çؽ¬Äڵ带 »ý¼ºÇÏ´Â ¶Ç ´Ù¸¥ ½ºÆ®¸µÀ» ã¾Æ³»Áö ¸øÇØ¾ß 
ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

º¸ÅëÀÇ Çؽ¬ÇÔ¼öµéÀº SNEFRU, MD2, MD4, MD5, SHAµîµîÀÌ Àִµ¥ MD4°¡ 1992³â¿¡ ¾ÆÁÖ ¶È¶ÈÇÑ 
»ç¶÷¿¡ ÀÇÇÏ¿© Çص¶ÀÌ µÇ¾î ¹ö·Á¼­ MD5·Î ºñÆ®±æÀ̸¦ ¹ßÀü½ÃÅ°±â¿¡ À̸£·¶´Ù³×¿ä..
SHA°°Àº °æ¿ìµµ MD4¿¡¼­ ÆÄ»ýµÈ 160ºñÆ® Çؽ¬Äڵ带 ¸¸µå´Â ³ðÀε¥ º¸¸é ´ë·« MD5¿Í 
ºñ½ÁÇÑ ÇüŸ¦ °¡Áö°í ÀÖ½À´Ï´Ù.

MD5°°Àº °æ¿ì »ç½Ç SHAº¸´Ù 32ºñÆ®°¡ ÀÛÀº 128ºñÆ®¸¦ °¡Áö°í ÀÖÁö¸¸ ºü¸£°í, ½¬¿ì¸ç, °£°áÇϴٴµ¥
Ư¡À»  µÑ¼ö Àְڳ׿ä. ¾Ë·ÁÁø °á°ú·Î´Â SHAº¸´Ù MD5ÀÇ ¼öÇ༺´ÉÀÌ ¾à 25%Á¤µµ ºü¸£´Ù´Â 
Ư¡À» °¡Áö°í ÀÖ½À´Ï´Ù.
 
SHA°°Àº °æ¿ì´Â SMTP¼­¹ö³ª ±âŸµîµîÀÇ µ¥¸óµî¿¡¼­ »ç¿ëÀÚ¿¡ ´ëÇÑ ³»¿ëµîÀ» ¿É¼ÇÀ¸·Î ¼±ÅÃÇÏ¿© 
»ç¿ëÇÒ¼öµµ ÀÖ°ÔÇÏ°í ÀÖÁÒ.

¢º ÀÚ¹Ù¿¡¼­ÀÇ MD5ÀÇ »ç¿ë 

¾î¶² ¹æ½ÄÀÇ Çؽ¬°á°ú°¡ ³ª¿À´ÂÁö ¾Ë°í ½Í´Ù¸é ¿·¿¡ ÀÖ´Â ÄÄÇ»ÅÍÁß¿¡ linux°°Àº°Ô ÀÖÀ¸¸é ¿­¾îº¸¼¼¿ä
ÄַܼΠ/etc/passwdÆÄÀÏÀ» ¿­¾î¼­ ÇØ´ç »ç¿ëÀڵ鿡 ´ëÇÑ Æнº¿öµå°¡ ¾î¶»°Ô ÀÔ·ÂÀÌ µÇ¾îÁ® ÀÖ´ÂÁö 
º¸¼¼¿ä. cbWWy0LuJU90FgQ9GE/JcA== µîµîÀÇ ¹®ÀÚ·Î Àå½ÄÀ» ÇÏ°í ÀÖ´Â °Ô º¸ÀÏ°Ì´Ï´Ù.

ÀÚ ÀÌÁ¦ ±×·¯ÇÑ Çؽ¬ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ °á°ú°ªÀ» ÀÚ¹ÙÃø¿¡¼­ ¾ò¾î³¾ °ÍÀε¥, ±âº»ÀûÀÎ MD5¾Ë°í¸®ÁòÀ» 
ÀÌ¿ëÇÏ¿© ÀÚ¹ÙÄڵ带 Â¥°Ô µÈ´Ù¸é ¾à 400¶óÀÎÁ¤µµÀÇ byte¿¬»êÀ» ÅëÇÏ¿© °á°ú°ªÀ» ¾ò¾î³¾ ¼ö 
ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ¾Ë°í¸®Áò ÀÌÇØÇÏ°í ±×°É Â¥½Ç¶ø´Ï±î?
º¸ÅëÀÇ ÀÎÅͳÝÀ» µÚÁø´Ù°í ÇßÀ»¶§ Áö±Ý ¿©·¯ºÐÀº »¡¸® ã°í »¡¸® Àû¿ëÇÏ°í ½Í¾î¼­À̱⠶§¹®¿¡ 
API¸¦ ÀÌ¿ëÇÏ¿© ¸¸µé¾î³»´Â ¹æ¹ýÀ» ´õ ¼±È£ÇÏ°ÚÁÒ~ ¿¬±¸ÀÚ ±âÁúÀÌ ÀÖ´Ù¸é ±× ¿ø¸®¸¦ ¾Ë°í ½Í¾îÇÒ
Áö´Â ¸ô¶óµµ ¸»ÀÌÁÒ~ 

½ÃÀÛÇغ¸ÁÒ~
ÀÚ¹Ù¿¡¼­ java.securityÆÐÅ°Áö¿¡ º¸¸é ¿©·¯°¡Áö º¸¾È¿¡ °ü·ÃµÈ Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºµÇ¾î
ÀÖ½À´Ï´Ù. °Å±â¿¡ MessageDigestŬ·¡½º°¡ ÇØ´ç ¾Ë°í¸®ÁòÀ» ÀÌ¿ëÇÏ¿© digest¸¦ ÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºÇØÁÝ´Ï´Ù.

º¸ÅëÀÇ UtilÀ» ¸¸µç´ÙÇÏ¸é °³¹ßµÇ´Â ÇÁ·¹ÀÓ¿÷ÀÇ util package¿¡ À§Ä¡ÇÒ °ÍÀ̱⠶§¹®¿¡ °øÅëÀ¸·Î 
»ç¿ëÇÒ ¼ö ÀÖµµ·Ï Ŭ·¡½º¸¦ ±¸¼ºÇÕ´Ï´Ù

¢º SecurityUtil.java 

import java.security.*;

public class  SecurityUtil {

public class  SecurityUtil {

    /**
     *	byte[] ret = HashUtil.digest("MD5", "abcd".getBytes()); 

* ó·³ È£Ãâ */ public static byte[] digest(String alg, byte[] input) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance(alg); return md.digest(input); } public static String getCryptoMD5String(String inputValue) throws Exception { if( inputValue == null ) throw new Exception("Can't conver to Message Digest 5 String value!!"); byte[] ret = digest("MD5", inputValue.getBytes()); String result = Base64Util.encode(ret); return result; } }

À§ÀÇ Å¬·¡½º¿¡ ÇØ´ç ½ºÆ®¸µ°ªÀ» ´øÁö°Ô µÇ¸é ½ÇÁ¦ digestµÈ °á°ú ¹®ÀÚ¿­À» µÇµ¹·Á ÁÙ¼ö ÀÖµµ·Ï ó¸®ÇÏ¿´´Âµ¥ ÀÌ°ÍÀÌ ³¡À̳Ä~ ¾Æ´Õ´Ï´Ù. ½ÇÁ¦ ´øÁ®Áø Çؽ¬ÇÔ¼ö¿¡ ÀÇÇÑ °á°ú¸¦ System.outÀ¸·Î Âï°Ô µÇ¸é Âî±×·¯Áø ÄÚµåÇüÅ·Π³ª¿À°Ô µÇ´Âµ¥ ÀÌ°ÍÀ» ¿ì¸® ´«À¸·Î ºñ±³ÇÏ¿© String¹®ÀÚºñ±³¸¦ ÅëÇÏ¿© ÃßÈÄ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ·Á¸é Base64 ÀÎÄÚµùÀ» ½ÃµµÇØ¾ß ÇÕ´Ï´Ù. ±× À¯Æ¿¸®Æ¼ Ŭ·¡½º´Â ¾Æ·¡¿Í °°½À´Ï´Ù. ¢º Base64Util.java


import sun.misc.*;
import java.io.*;

/**
* 
* Filename  : Base64Util.java
* Class : Base64Util
* Function : Base64 Encoding/DecodingÀ» ¼öÇàÇϴ Ŭ·¡½º
* Comment :
* History : 2000-08-16 2:48¿ÀÈÄ
*
* @version 1.0 * @author carouser */ public class Base64Util { public Base64Util() {} /** * Base64EncodingÀ» ¼öÇàÇÑ´Ù. binany in ascii out * * @param encodeBytes encodingÇÒ byte array * @return encoding µÈ String */ public static String encode(byte[] encodeBytes) { BASE64Encoder base64Encoder = new BASE64Encoder(); ByteArrayInputStream bin = new ByteArrayInputStream(encodeBytes); ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] buf = null; try{ base64Encoder.encodeBuffer(bin, bout); } catch(Exception e) { System.out.println("Exception"); e.printStackTrace(); } buf = bout.toByteArray(); return new String(buf).trim(); } /** * Base64Decoding ¼öÇàÇÑ´Ù. binany out ascii in * * @param strDecode decodingÇÒ String * @return decoding µÈ byte array */ public static byte[] decode(String strDecode) { BASE64Decoder base64Decoder = new BASE64Decoder(); ByteArrayInputStream bin = new ByteArrayInputStream(strDecode.getBytes()); ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] buf = null; try { base64Decoder.decodeBuffer(bin, bout); } catch(Exception e) { System.out.println("Exception"); e.printStackTrace(); } buf = bout.toByteArray(); return buf; } }
À§ÀÇ Å¬·¡½ºÃ³·³ Á¤ÀǵǾî Áú ¼ö ÀÖÀ¸¸ç, Ŭ·¡½º°¡ ÀÛ¼ºµÇ¾ú´Ù¸é ¾îµð¼­µçÁö String passwd = SecurityUtil.getCryptoMD5String("Carouser"); ó·³ ÀÔ·ÂÇßÀ» °æ¿ì ÇØ´ç ½ºÆ®¸µÀÌ MD5¿¡ ÀÇÇÏ¿© º¯È¯µÈ ¹®ÀÚ¿­°ªÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖ½¿´ç~ ¿À´Ã ÇÏ·çµµ ¼ö°íÇϼ¼¿ä..°©ÀÚ±â ÀÏÀÌ ¹Ð·Áµå³×¿ä.. ´Ü±µ~
 
1
References
 
Copyright ¨Ï 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD