¿©·¯ºÐ Á¤¸» ¿À·£¸¸ÀÔ´Ï´Ù. ³î»õ~ÀÔ´Ï´Ù. ¿äÁò ÀÎÅͳÝÀ» µÚÁ®ºÃ´õ´Ï ¿ø ³î»õ¶õ ´ëȸíÀ» ¾²´Â Àΰ£µéÀÌ
¿öÂ ¸¹´øÁö ¿ø~ ½ºÅ͵𸦠½ÃÀÛÇÏ°í ³ª¼ 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¿¡ ÀÇÇÏ¿© º¯È¯µÈ ¹®ÀÚ¿°ªÀ» È®ÀÎÇÏ½Ç ¼ö ÀÖ½¿´ç~
¿À´Ã ÇÏ·çµµ ¼ö°íÇϼ¼¿ä..°©ÀÚ±â ÀÏÀÌ ¹Ð·Áµå³×¿ä..
´Ü±µ~
|