<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>amplengin2님의 이글루</title>
	<link>http://amplengin2.egloos.com</link>
	<description>아름답게!!</description>
	<language>ko</language>
	<pubDate>Sat, 08 Aug 2009 14:32:09 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>amplengin2님의 이글루</title>
		<url>http://pds13.egloos.com/logo/200902/27/26/f0023626.jpg</url>
		<link>http://amplengin2.egloos.com</link>
		<width>80</width>
		<height>60</height>
		<description>아름답게!!</description>
	</image>
  	<item>
		<title><![CDATA[ 암호 알고리즘 종류 ]]> </title>
		<link>http://amplengin2.egloos.com/1490900</link>
		<guid>http://amplengin2.egloos.com/1490900</guid>
		<description>
			<![CDATA[ 
  출처 : <a href="http://blog.naver.com/kant77?Redirect=Log&amp;logNo=80019703395">http://blog.naver.com/kant77?Redirect=Log&amp;logNo=80019703395</a><br><br>&nbsp;각종 암호 알고리즘<p>&nbsp;</p><p><table style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" valign="top" rowspan="3" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림">블럭 암호</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림" lang="EN-US">(64 </span></b><b><span style="FONT-FAMILY: 굴림">비트<span lang="EN-US">)</span></span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"> DES, DES3, DESX, RC5, BLOWFISH, CAST128, IDEA, SAFER , RC2<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 1"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림" lang="EN-US">(128 </span></b><b><span style="FONT-FAMILY: 굴림">비트<span lang="EN-US">)</span></span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"> SEED, CRYPTON, CAST256, RC6, TWOFISH, RIJNDAEL, MARS, SERPENT<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 2"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><b><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%">Mode of Operation :</span></span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%"><br>ECB, ECB_CTS, CBC, CBC_PAD, CBC_CTS, OFB, CFB, Counter<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 3"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림">스트림 암호</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%">RC4, SEAL<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 4"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림">해쉬 함수</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%">MD5, SHA1, SHA256, SHA384, SHA512, RMD128, RMD160, RMD256, RMD320, HAS160, TIGER<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 5"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" rowspan="2" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림" lang="EN-US">MAC </span></b><b><span style="FONT-FAMILY: 굴림">함수</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><span style="FONT-FAMILY: 굴림" lang="EN-US">HMAC-XXX, KMAC-XXX (XXX : </span><span style="FONT-FAMILY: 굴림">해쉬 함수<span lang="EN-US">)<o:p></o:p></span></span></span></p></td></tr><tr style="mso-yfti-irow: 6"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><span style="FONT-FAMILY: 굴림" lang="EN-US">YYY-MAC (YYY : </span><span style="FONT-FAMILY: 굴림">블럭 암호<span lang="EN-US">); FIPS 113, ISO/IEC 9797-1)<o:p></o:p></span></span></span></p></td></tr><tr style="mso-yfti-irow: 7"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림">공개키 암호</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%">RSA (PKCS#1 v2.1, P1363)<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 8"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림">공개키 서명</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><span style="FONT-FAMILY: 굴림" lang="EN-US">RSA (PKCS#1 v2.1, P1363), DSA (FIPS186-2), ECDSA (X9.62), KCDSA (</span><span style="FONT-FAMILY: 굴림">표준안<span lang="EN-US">), ECKCDSA (</span>표준안<span lang="EN-US">)<o:p></o:p></span></span></span></p></td></tr><tr style="mso-yfti-irow: 9"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" rowspan="2" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림">키 분배</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%">Diffie-Hellman (DH) (PKCS#3, X9.42, RFC 2631)<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 10"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%">Elliptic Curve Diffie-Hellman (EC-DH)<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 11"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림">키 암호화</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%">RFC 2630, S/MIME WG Drafts, Proprieatary<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 12"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 86.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" rowspan="2" width="115"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-SIZE: 100%"><b><span style="FONT-FAMILY: 굴림">키 유도</span></b><span style="FONT-FAMILY: 굴림" lang="EN-US"><o:p></o:p></span></span></p></td><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 굴림" lang="EN-US"><span style="FONT-SIZE: 100%">Password-based : PKCS#5, PKCS#12, PKIX (RFC 2510)<o:p></o:p></span></span></p></td></tr><tr style="mso-yfti-irow: 13; mso-yfti-lastrow: yes"><td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 348.7pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="465"><p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal"><span style="FONT-FAMILY: 굴림; mso-ansi-language: PT-BR" lang="PT-BR"><span style="FONT-SIZE: 100%">General : IEEE P1363, X9.42, IPSEC, etc. </span></span></p></td></tr></tbody></table></p><br/><br/>tag : <a href="/tag/암호알고리즘" rel="tag">암호알고리즘</a>			 ]]> 
		</description>
		<category>Prog Skill</category>
		<category>암호알고리즘</category>

		<comments>http://amplengin2.egloos.com/1490900#comments</comments>
		<pubDate>Sat, 08 Aug 2009 14:32:09 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ DES, 3DES, AES, DSA, ECDSA, SHA1, SHA2 ]]> </title>
		<link>http://amplengin2.egloos.com/1490897</link>
		<guid>http://amplengin2.egloos.com/1490897</guid>
		<description>
			<![CDATA[ 
  출처 : <a href="http://blog.naver.com/willflow00?Redirect=Log&amp;logNo=60001556381">http://blog.naver.com/willflow00?Redirect=Log&amp;logNo=60001556381</a><br><br><br><center><h2>미연방 표준 암호 알고리즘 </h2></center><br><hr>미연방 표준 알고리즘들에 대한 표준 문서, 소스 코드(테스트 벡터 포함) 등을 제공합니다. <br><table align="center"><tbody><tr><td><a class="con_link" href="http://cnscenter.future.co.kr/main/research/usfederal.html#block" target="_blank"><span style="COLOR: #008000; FONT-SIZE: 100%">DES/3DES/AES</span></a></td><td>&nbsp; &nbsp;</td><td><a class="con_link" href="http://cnscenter.future.co.kr/main/research/usfederal.html#hash" target="_blank"><span style="COLOR: #008000; FONT-SIZE: 100%">SHA1/SHA2</span></a></td><td>&nbsp; &nbsp;</td><td><a class="con_link" href="http://cnscenter.future.co.kr/main/research/usfederal.html#dsa" target="_blank"><span style="COLOR: #008000; FONT-SIZE: 100%">DSA/ECDSA</span></a></td></tr></tbody></table><!----------  Block ciphers -----------><a class="con_link" name="block" target="_blank"></a><hr><h3><span style="COLOR: #a52a2a">DES/3DES/AES</span> </h3>DES(Data Encryption Standard)는 Lucifer를 보완하여 IBM에서 개발한 블럭암호 알고리즘으로 1977년에 미국 표준국(U.S. National Bureau of Standards : NBS, NIST 전신)에서 표준으로 채택(FIPS PUB 46)되었읍니다. 64비트 입력 블럭을 56비트 비밀키를 이용하여 암호화하는 블럭암호 알고리즘이며, 미국 연방정부의 데이터 보호용으로 출발하여 ANSI(American National Standards Institute)의 표준 암호 알고리즘, ABA(American Bankers' Association)에서 미국내 금융 정보의 보호 표준으로 사용하기까지 사용 범위가 확대되어 현재 전세계적으로 가장 널리 사용되고 있습니다. 그러나 56비트라는 짧은 키 길이로 인해 더 이상 안전하지 않다고 보는 것이 일반적인 견해이며, IPSEC이나 PKIX 등 새로운 응용들에서는 DES를 3회 반복는 Triple DES를 사용하도록 권고하였으며, 최근 차세대 미국 표준인 AES가 확정됨에 따라 앞으로 점차적으로 그 사용범위가 줄어들 것으로 보입니다. <br><br>DES의 56비트라는 짧은 키 길이로 인한 안전성 문제를 해결하기 위한 대안으로 3개의 키로 DES를 3회 반복하여 사용하는 Triple DES를 사용하였읍니다. 3DES는 속도가 DES보다 3배 정도 느리다는 단점에도 불구하고, 기존의 DES를 이용하여 쉽게 구현되며 DES의 안전성 문제를 해결하는 장점으로 인하여 여러 표준에서 사용되었습니다. 최근 차세대 미국 표준인 AES가 확정됨에 따라 앞으로 점차적으로 그 사용범위가 줄어들 것으로 보입니다. <br><br>1998년을 기점으로 표준 기한이 만료된 DES를 대체할 블럭암호의 필요성에 따라, NIST에서는 향후 정부와 상업계에서 사용할 수 있는 강한 암호화 알고리즘 표준으로 AES(Advanced Encryption Standard)의 개발을 추진하였읍니다. NIST는 3DES보다 더 효율적이고 안전하며 로얄티가 없어야 하는 등을 만족하는 알고리즘을 공모하고, 3년여에 걸쳐 15개의 후보 알고리즘을 공개적으로 평가하여, 2000년 10월 2일 최종 AES 알고리즘을 선정/발표하였읍니다. AES에 채택된 블럭암호는 Daemem과 Rijmen에 의해 개발되고 RIJNDAEL로 명명된 알고리즘으로 DES와 Triple DES를 대신해서 새로운 업계 표준으로 자리잡게 될 것입니다. <br><br>DES : <a class="con_link" href="http://csrc.nist.gov/fips/fips46-3.pdf" target="_blank"><span style="COLOR: #0033cc">표준문서(pdf)</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/crypto/standard/fips/fips46-3.pdf" target="_blank"><span style="COLOR: #0033cc">local copy</span></a>, <a class="con_link" href="http://csrc.nist.gov/cryptval/des.htm" target="_blank"><span style="COLOR: #0033cc">관련정보(htm)</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/research/source-code/des.ZIP" target="_blank"><span style="COLOR: #0033cc">소스코드(zip)</span></a>. <br>3DES : <a class="con_link" href="http://csrc.nist.gov/cryptval/des.htm" target="_blank"><span style="COLOR: #0033cc">관련정보(htm)</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/research/source-code/des3.ZIP" target="_blank"><span style="COLOR: #0033cc">소스코드(zip)</span></a>. <br>AES : <a class="con_link" href="http://csrc.nist.gov/encryption/aes/" target="_blank"><span style="COLOR: #0033cc">관련정보</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/research/source-code/aes.ZIP" target="_blank"><span style="COLOR: #0033cc">소스코드(zip)</span></a>. <br><!----------  Hash functions -----------><a class="con_link" name="hash" target="_blank"></a><hr><h3><span style="COLOR: #a52a2a">SHA1/SHA2</span></h3>SHA1는 미 연방정부의 디지탈 서명 표준인 DSA를 위해 개발된 해쉬함수로 MD5와 유사한 구조로 설계되었으나 보다 안전한 것으로 인정되고 있습니다. 160비트 길이의 출력을 내며, 대부분의 인터넷 응용이나 국제/업계 표준들에서 DEFAULT 해쉬함수로 사용되고 있습니다. <br><br>SHA2는 보다 높은 수준의 안전성이 요구되는 응용을 위해 만들어진 해쉬 알고리즘들로 256비트, 384비트, 512비트 길이의 출력을 내며, 현재 FIPS에서 표준화를 추진중에 있습니다. <br><br>SHA1 : <a class="con_link" href="http://www.itl.nist.gov/fipspubs/fip180-1.htm" target="_blank"><span style="COLOR: #0033cc">표준문서(htm)</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/research/source-code/sha1.ZIP" target="_blank"><span style="COLOR: #0033cc">소스코드(zip)</span></a>. <br>SHA2 : <a class="con_link" href="http://csrc.nist.gov/cryptval/shs.html" target="_blank"><span style="COLOR: #0033cc">관련정보(html)</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/research/source-code/sha256.ZIP" target="_blank"><span style="COLOR: #0033cc">소스코드(sha256, zip)</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/research/source-code/sha384.ZIP" target="_blank"><span style="COLOR: #0033cc">소스코드(sha384, zip)</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/research/source-code/sha512.ZIP" target="_blank"><span style="COLOR: #0033cc">소스코드(sha512, zip)</span></a>. <br><!----------  DSA/ECDSA -----------><a class="con_link" name="dsa" target="_blank"></a><hr><h3><span style="COLOR: #a52a2a">DSA/ECDSA</span> </h3>DSA(Digital Signature Algorithm)는 1991년 8월에 NIST(National Institution of Standard and Technology)가 DSS(Digital Signature Standard)에서 사용하기 위하여 발표한 정부용 전자서명 알고리즘으로 그 안전성은 이산대수 문제의 어려움에 기반을 두었읍니다. <br><br>ECDSA는 DSA 전자서명을 타원곡선을 이용한 전자서명 알고리즘으로 변형한 것으로, 다른 공개키 시스템의 키 길이에 비해서 훨씬 짧은 키를 사용하여도 동일한 안전도를 제공하므로 스마트 카드, 무선 통신 등과 같이 메모리와 처리능력이 제한된 분야에서 매우 효과적일 수 있읍니다. <br><br>DSA : <a class="con_link" href="http://csrc.nist.gov/fips/fips186-2.pdf" target="_blank"><span style="COLOR: #0033cc">표준문서(pdf)</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/crypto/standard/fips/fips186-2.pdf" target="_blank"><span style="COLOR: #0033cc">local copy</span></a>, <a class="con_link" href="http://cnscenter.future.co.kr/resource/research/source-code/dsa.ZIP" target="_blank"><span style="COLOR: #0033cc">소스코드(zip)</span></a>. <br>ECDSA : <a class="con_link" href="http://csrc.nist.gov/cryptval/dss.htm" target="_blank"><span style="COLOR: #0033cc">관련정보(htm)</span></a>.&nbsp; <br/><br/>tag : <a href="/tag/DES" rel="tag">DES</a>,&nbsp;<a href="/tag/3DES" rel="tag">3DES</a>,&nbsp;<a href="/tag/AES" rel="tag">AES</a>,&nbsp;<a href="/tag/DSA" rel="tag">DSA</a>,&nbsp;<a href="/tag/ECDSA" rel="tag">ECDSA</a>,&nbsp;<a href="/tag/SHA1" rel="tag">SHA1</a>,&nbsp;<a href="/tag/SHA2" rel="tag">SHA2</a>,&nbsp;<a href="/tag/소스코드" rel="tag">소스코드</a>,&nbsp;<a href="/tag/소스" rel="tag">소스</a>,&nbsp;<a href="/tag/암호" rel="tag">암호</a>			 ]]> 
		</description>
		<category>Prog Skill</category>
		<category>DES</category>
		<category>3DES</category>
		<category>AES</category>
		<category>DSA</category>
		<category>ECDSA</category>
		<category>SHA1</category>
		<category>SHA2</category>
		<category>소스코드</category>
		<category>소스</category>
		<category>암호</category>

		<comments>http://amplengin2.egloos.com/1490897#comments</comments>
		<pubDate>Sat, 08 Aug 2009 14:25:21 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ C언어에서 디버그 메시지 출력 2 ]]> </title>
		<link>http://amplengin2.egloos.com/1487799</link>
		<guid>http://amplengin2.egloos.com/1487799</guid>
		<description>
			<![CDATA[ 
  #include &lt;stdio.h&gt;<br>#include &lt;stdarg.h&gt;<br><br>void log( char *format, ...)<br>{<br>va_list ap;<br>FILE&nbsp;&nbsp; *fp = NULL;<br><br>fp = fopen( "log.txt", "a");<br><br>va_start( ap, format);<br><br>vfprintf( fp, format, ap);<br>fprintf( fp, "\n");<br><br>fclose(fp);<br><br>va_end(ap);<br>}<br/><br/>tag : <a href="/tag/디버그" rel="tag">디버그</a>			 ]]> 
		</description>
		<category>디버그</category>

		<comments>http://amplengin2.egloos.com/1487799#comments</comments>
		<pubDate>Wed, 05 Aug 2009 01:31:52 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ C언어에서 디버그 메시지 ]]> </title>
		<link>http://amplengin2.egloos.com/1487673</link>
		<guid>http://amplengin2.egloos.com/1487673</guid>
		<description>
			<![CDATA[ 
  <p>출처 : <a href="http://telpitz.tistory.com/157">http://telpitz.tistory.com/157</a><br><br>해당 파일명과 현재 라인수가 출력<br><br>#define DEBUG printf("File: %s, Line: %d \n",__FILE__, __LINE__);</p><br/><br/>tag : <a href="/tag/디버그" rel="tag">디버그</a>,&nbsp;<a href="/tag/메시지" rel="tag">메시지</a>,&nbsp;<a href="/tag/파일명" rel="tag">파일명</a>,&nbsp;<a href="/tag/라인수" rel="tag">라인수</a>			 ]]> 
		</description>
		<category>Prog Skill</category>
		<category>디버그</category>
		<category>메시지</category>
		<category>파일명</category>
		<category>라인수</category>

		<comments>http://amplengin2.egloos.com/1487673#comments</comments>
		<pubDate>Tue, 04 Aug 2009 18:02:34 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ AES 소스코드 ]]> </title>
		<link>http://amplengin2.egloos.com/1482324</link>
		<guid>http://amplengin2.egloos.com/1482324</guid>
		<description>
			<![CDATA[ 
  출처 : <a href="http://www.geocities.com/malbrain/aestable_c.html">http://www.geocities.com/malbrain/aestable_c.html</a><br><!-- following code added by server. PLEASE REMOVE --><link rel="stylesheet" type="text/css" href="http://us.geocities.com/js_source/div.css">&nbsp;<br><br>// advanced encryption standard<br>// author: karl malbrain, malbrain@yahoo.com<br><br>/*<br>This work, including the source code, documentation<br>and related data, is placed into the public domain.<br><br>The orginal author is Karl Malbrain.<br><br>THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY<br>OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF<br>MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE,<br>ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE<br>RESULTING FROM THE USE, MODIFICATION, OR<br>REDISTRIBUTION OF THIS SOFTWARE.<br>*/<br><br>typedef unsigned char uchar;<br>#include &lt;string.h&gt;<br>#include &lt;memory.h&gt;<br><br>// AES only supports Nb=4<br>#define Nb 4 // number of columns in the state &amp; expanded key<br><br>#define Nk 4 // number of columns in a key<br>#define Nr 10 // number of rounds in encryption<br><br>uchar Sbox[256] = { // forward s-box<br>0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,<br>0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,<br>0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,<br>0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,<br>0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,<br>0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,<br>0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,<br>0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,<br>0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,<br>0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,<br>0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,<br>0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,<br>0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,<br>0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,<br>0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,<br>0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16};<br><br>uchar InvSbox[256] = { // inverse s-box<br>0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,<br>0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,<br>0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,<br>0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,<br>0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,<br>0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,<br>0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,<br>0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,<br>0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,<br>0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,<br>0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,<br>0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,<br>0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,<br>0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,<br>0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,<br>0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d};<br><br>// combined Xtimes2[Sbox[]]<br>uchar Xtime2Sbox[256] = {<br>0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91, 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec, <br>0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb, 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b, <br>0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83, 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a, <br>0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f, 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea, <br>0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b, 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13, <br>0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6, 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85, <br>0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11, 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b, <br>0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1, 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf, <br>0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e, 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6, <br>0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b, 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad, <br>0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8, 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2, <br>0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49, 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10, <br>0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97, 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f, <br>0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c, 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27, <br>0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33, 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5, <br>0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0, 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c <br>};<br><br>// combined Xtimes3[Sbox[]]<br>uchar Xtime3Sbox[256] = {<br>0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54, 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a, <br>0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b, 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b, <br>0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f, 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f, <br>0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5, 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f, <br>0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb, 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97, <br>0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed, 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a, <br>0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94, 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3, <br>0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04, 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d, <br>0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39, 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95, <br>0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83, 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76, <br>0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4, 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b, <br>0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0, 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18, <br>0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51, 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85, <br>0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12, 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9, <br>0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7, 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a, <br>0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8, 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a <br>};<br><br>// modular multiplication tables<br>// based on:<br><br>// Xtime2[x] = (x &amp; 0x80 ? 0x1b : 0) ^ (x + x)<br>// Xtime3[x] = x^Xtime2[x];<br><br>uchar Xtime2[256] = {<br>0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, <br>0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, <br>0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, <br>0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, <br>0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, <br>0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, <br>0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, <br>0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, <br>0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05, <br>0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25, <br>0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, <br>0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, <br>0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, <br>0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, <br>0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, <br>0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5}; <br><br>uchar Xtime9[256] = {<br>0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, <br>0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, <br>0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, <br>0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, <br>0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, <br>0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, <br>0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, <br>0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, <br>0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, <br>0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, <br>0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, <br>0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, <br>0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, <br>0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, <br>0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, <br>0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46};<br><br>uchar XtimeB[256] = {<br>0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, <br>0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, <br>0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, <br>0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, <br>0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, <br>0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, <br>0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, <br>0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, <br>0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, <br>0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, <br>0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, <br>0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, <br>0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, <br>0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, <br>0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, <br>0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3}; <br><br>uchar XtimeD[256] = {<br>0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, <br>0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, <br>0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, <br>0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, <br>0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, <br>0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, <br>0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, <br>0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, <br>0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, <br>0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, <br>0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, <br>0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, <br>0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, <br>0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, <br>0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, <br>0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97}; <br><br>uchar XtimeE[256] = {<br>0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, <br>0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, <br>0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, <br>0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, <br>0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, <br>0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, <br>0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, <br>0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, <br>0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, <br>0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, <br>0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, <br>0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, <br>0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, <br>0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, <br>0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, <br>0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d}; <br><br>// exchanges columns in each of 4 rows<br>// row0 - unchanged, row1- shifted left 1, <br>// row2 - shifted left 2 and row3 - shifted left 3<br>void ShiftRows (uchar *state)<br>{<br>uchar tmp;<br><br>// just substitute row 0<br>state[0] = Sbox[state[0]], state[4] = Sbox[state[4]];<br>state[8] = Sbox[state[8]], state[12] = Sbox[state[12]];<br><br>// rotate row 1<br>tmp = Sbox[state[1]], state[1] = Sbox[state[5]];<br>state[5] = Sbox[state[9]], state[9] = Sbox[state[13]], state[13] = tmp;<br><br>// rotate row 2<br>tmp = Sbox[state[2]], state[2] = Sbox[state[10]], state[10] = tmp;<br>tmp = Sbox[state[6]], state[6] = Sbox[state[14]], state[14] = tmp;<br><br>// rotate row 3<br>tmp = Sbox[state[15]], state[15] = Sbox[state[11]];<br>state[11] = Sbox[state[7]], state[7] = Sbox[state[3]], state[3] = tmp;<br>}<br><br>// restores columns in each of 4 rows<br>// row0 - unchanged, row1- shifted right 1, <br>// row2 - shifted right 2 and row3 - shifted right 3<br>void InvShiftRows (uchar *state)<br>{<br>uchar tmp;<br><br>// restore row 0<br>state[0] = InvSbox[state[0]], state[4] = InvSbox[state[4]];<br>state[8] = InvSbox[state[8]], state[12] = InvSbox[state[12]];<br><br>// restore row 1<br>tmp = InvSbox[state[13]], state[13] = InvSbox[state[9]];<br>state[9] = InvSbox[state[5]], state[5] = InvSbox[state[1]], state[1] = tmp;<br><br>// restore row 2<br>tmp = InvSbox[state[2]], state[2] = InvSbox[state[10]], state[10] = tmp;<br>tmp = InvSbox[state[6]], state[6] = InvSbox[state[14]], state[14] = tmp;<br><br>// restore row 3<br>tmp = InvSbox[state[3]], state[3] = InvSbox[state[7]];<br>state[7] = InvSbox[state[11]], state[11] = InvSbox[state[15]], state[15] = tmp;<br>}<br><br>// recombine and mix each row in a column<br>void MixSubColumns (uchar *state)<br>{<br>uchar tmp[4 * Nb];<br><br>// mixing column 0<br>tmp[0] = Xtime2Sbox[state[0]] ^ Xtime3Sbox[state[5]] ^ Sbox[state[10]] ^ Sbox[state[15]];<br>tmp[1] = Sbox[state[0]] ^ Xtime2Sbox[state[5]] ^ Xtime3Sbox[state[10]] ^ Sbox[state[15]];<br>tmp[2] = Sbox[state[0]] ^ Sbox[state[5]] ^ Xtime2Sbox[state[10]] ^ Xtime3Sbox[state[15]];<br>tmp[3] = Xtime3Sbox[state[0]] ^ Sbox[state[5]] ^ Sbox[state[10]] ^ Xtime2Sbox[state[15]];<br><br>// mixing column 1<br>tmp[4] = Xtime2Sbox[state[4]] ^ Xtime3Sbox[state[9]] ^ Sbox[state[14]] ^ Sbox[state[3]];<br>tmp[5] = Sbox[state[4]] ^ Xtime2Sbox[state[9]] ^ Xtime3Sbox[state[14]] ^ Sbox[state[3]];<br>tmp[6] = Sbox[state[4]] ^ Sbox[state[9]] ^ Xtime2Sbox[state[14]] ^ Xtime3Sbox[state[3]];<br>tmp[7] = Xtime3Sbox[state[4]] ^ Sbox[state[9]] ^ Sbox[state[14]] ^ Xtime2Sbox[state[3]];<br><br>// mixing column 2<br>tmp[8] = Xtime2Sbox[state[8]] ^ Xtime3Sbox[state[13]] ^ Sbox[state[2]] ^ Sbox[state[7]];<br>tmp[9] = Sbox[state[8]] ^ Xtime2Sbox[state[13]] ^ Xtime3Sbox[state[2]] ^ Sbox[state[7]];<br>tmp[10]&nbsp; = Sbox[state[8]] ^ Sbox[state[13]] ^ Xtime2Sbox[state[2]] ^ Xtime3Sbox[state[7]];<br>tmp[11]&nbsp; = Xtime3Sbox[state[8]] ^ Sbox[state[13]] ^ Sbox[state[2]] ^ Xtime2Sbox[state[7]];<br><br>// mixing column 3<br>tmp[12] = Xtime2Sbox[state[12]] ^ Xtime3Sbox[state[1]] ^ Sbox[state[6]] ^ Sbox[state[11]];<br>tmp[13] = Sbox[state[12]] ^ Xtime2Sbox[state[1]] ^ Xtime3Sbox[state[6]] ^ Sbox[state[11]];<br>tmp[14] = Sbox[state[12]] ^ Sbox[state[1]] ^ Xtime2Sbox[state[6]] ^ Xtime3Sbox[state[11]];<br>tmp[15] = Xtime3Sbox[state[12]] ^ Sbox[state[1]] ^ Sbox[state[6]] ^ Xtime2Sbox[state[11]];<br><br>memcpy (state, tmp, sizeof(tmp));<br>}<br><br>// restore and un-mix each row in a column<br>void InvMixSubColumns (uchar *state)<br>{<br>uchar tmp[4 * Nb];<br>int i;<br><br>// restore column 0<br>tmp[0] = XtimeE[state[0]] ^ XtimeB[state[1]] ^ XtimeD[state[2]] ^ Xtime9[state[3]];<br>tmp[5] = Xtime9[state[0]] ^ XtimeE[state[1]] ^ XtimeB[state[2]] ^ XtimeD[state[3]];<br>tmp[10] = XtimeD[state[0]] ^ Xtime9[state[1]] ^ XtimeE[state[2]] ^ XtimeB[state[3]];<br>tmp[15] = XtimeB[state[0]] ^ XtimeD[state[1]] ^ Xtime9[state[2]] ^ XtimeE[state[3]];<br><br>// restore column 1<br>tmp[4] = XtimeE[state[4]] ^ XtimeB[state[5]] ^ XtimeD[state[6]] ^ Xtime9[state[7]];<br>tmp[9] = Xtime9[state[4]] ^ XtimeE[state[5]] ^ XtimeB[state[6]] ^ XtimeD[state[7]];<br>tmp[14] = XtimeD[state[4]] ^ Xtime9[state[5]] ^ XtimeE[state[6]] ^ XtimeB[state[7]];<br>tmp[3] = XtimeB[state[4]] ^ XtimeD[state[5]] ^ Xtime9[state[6]] ^ XtimeE[state[7]];<br><br>// restore column 2<br>tmp[8] = XtimeE[state[8]] ^ XtimeB[state[9]] ^ XtimeD[state[10]] ^ Xtime9[state[11]];<br>tmp[13] = Xtime9[state[8]] ^ XtimeE[state[9]] ^ XtimeB[state[10]] ^ XtimeD[state[11]];<br>tmp[2]&nbsp; = XtimeD[state[8]] ^ Xtime9[state[9]] ^ XtimeE[state[10]] ^ XtimeB[state[11]];<br>tmp[7]&nbsp; = XtimeB[state[8]] ^ XtimeD[state[9]] ^ Xtime9[state[10]] ^ XtimeE[state[11]];<br><br>// restore column 3<br>tmp[12] = XtimeE[state[12]] ^ XtimeB[state[13]] ^ XtimeD[state[14]] ^ Xtime9[state[15]];<br>tmp[1] = Xtime9[state[12]] ^ XtimeE[state[13]] ^ XtimeB[state[14]] ^ XtimeD[state[15]];<br>tmp[6] = XtimeD[state[12]] ^ Xtime9[state[13]] ^ XtimeE[state[14]] ^ XtimeB[state[15]];<br>tmp[11] = XtimeB[state[12]] ^ XtimeD[state[13]] ^ Xtime9[state[14]] ^ XtimeE[state[15]];<br><br>for( i=0; i &lt; 4 * Nb; i++ )<br>state[i] = InvSbox[tmp[i]];<br>}<br><br>// encrypt/decrypt columns of the key<br>// n.b. you can replace this with<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte-wise xor if you wish.<br><br>void AddRoundKey (unsigned *state, unsigned *key)<br>{<br>int idx;<br><br>for( idx = 0; idx &lt; 4; idx++ )<br>state[idx] ^= key[idx];<br>}<br><br>uchar Rcon[11] = {<br>0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36};<br><br>// produce Nb bytes for each round<br>void ExpandKey (uchar *key, uchar *expkey)<br>{<br>uchar tmp0, tmp1, tmp2, tmp3, tmp4;<br>unsigned idx;<br><br>memcpy (expkey, key, Nk * 4);<br><br>for( idx = Nk; idx &lt; Nb * (Nr + 1); idx++ ) {<br>tmp0 = expkey[4*idx - 4];<br>tmp1 = expkey[4*idx - 3];<br>tmp2 = expkey[4*idx - 2];<br>tmp3 = expkey[4*idx - 1];<br>if( !(idx % Nk) ) {<br>tmp4 = tmp3;<br>tmp3 = Sbox[tmp0];<br>tmp0 = Sbox[tmp1] ^ Rcon[idx/Nk];<br>tmp1 = Sbox[tmp2];<br>tmp2 = Sbox[tmp4];<br>} else if( Nk &gt; 6 &amp;&amp; idx % Nk == 4 ) {<br>tmp0 = Sbox[tmp0];<br>tmp1 = Sbox[tmp1];<br>tmp2 = Sbox[tmp2];<br>tmp3 = Sbox[tmp3];<br>}<br><br>expkey[4*idx+0] = expkey[4*idx - 4*Nk + 0] ^ tmp0;<br>expkey[4*idx+1] = expkey[4*idx - 4*Nk + 1] ^ tmp1;<br>expkey[4*idx+2] = expkey[4*idx - 4*Nk + 2] ^ tmp2;<br>expkey[4*idx+3] = expkey[4*idx - 4*Nk + 3] ^ tmp3;<br>}<br>}<br><br>// encrypt one 128 bit block<br>void Encrypt (uchar *in, uchar *expkey, uchar *out)<br>{<br>uchar state[Nb * 4];<br>unsigned round;<br><br>memcpy (state, in, Nb * 4);<br>AddRoundKey ((unsigned *)state, (unsigned *)expkey);<br><br>for( round = 1; round &lt; Nr + 1; round++ ) {<br>if( round &lt; Nr )<br>MixSubColumns (state);<br>else<br>ShiftRows (state);<br><br>AddRoundKey ((unsigned *)state, (unsigned *)expkey + round * Nb);<br>}<br><br>memcpy (out, state, sizeof(state));<br>}<br><br>void Decrypt (uchar *in, uchar *expkey, uchar *out)<br>{<br>uchar state[Nb * 4];<br>unsigned round;<br><br>memcpy (state, in, sizeof(state));<br><br>AddRoundKey ((unsigned *)state, (unsigned *)expkey + Nr * Nb);<br>InvShiftRows(state);<br><br>for( round = Nr; round--; )<br>{<br>AddRoundKey ((unsigned *)state, (unsigned *)expkey + round * Nb);<br>if( round )<br>InvMixSubColumns (state);<br>} <br><br>memcpy (out, state, sizeof(state));<br>}<br><br>#include &lt;stdio.h&gt;<br>#include &lt;fcntl.h&gt;<br>extern int _setmode (int, int);<br><br>uchar in[16] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};<br><br>uchar key[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f};<br><br>uchar out[16];<br><br>#ifndef unix<br>void rd_clock (__int64 *ans)<br>{<br>unsigned dwLow, dwHigh;<br><br>__asm {<br>rdtsc<br>mov dwLow, eax<br>mov dwHigh, edx<br>}<br>*ans = (__int64)dwHigh &lt;&lt; 32 | (__int64)dwLow;<br>}<br>#else<br>typedef long long __int64;<br><br>void rd_clock (__int64 *ans)<br>{<br>unsigned long long dwBoth;<br><br>__asm__ volatile(".byte 0x0f, 0x31" : "=A"(dwBoth)); <br>*ans = dwBoth;<br>}<br>#endif<br><br>uchar samplekey[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab,<br>0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};<br><br>uchar samplein[] = {0x32, 0x43, 0xf6, 0xa8, 0x88, 0x5a, 0x30, 0x8d, 0x31,<br>0x31, 0x98, 0xa2, 0xe0, 0x37, 0x07, 0x34};<br><br>void sample ()<br>{<br>uchar expkey[4 * Nb * (Nr + 1)];<br>unsigned idx, diff;<br>__int64 start, stop;<br><br>ExpandKey (samplekey, expkey);<br>Encrypt (samplein, expkey, out);<br><br>rd_clock(&amp;start);<br><br>Encrypt (samplein, expkey, out);<br><br>rd_clock(&amp;stop);<br>diff = stop - start;<br>printf ("encrypt time: %d, %d cycles per byte\n", diff, diff/16);<br><br>for( idx = 0; idx &lt; 16; idx++ )<br>printf ("%.2x ", out[idx]);<br><br>printf ("\n");<br>Decrypt (out, expkey, in);<br>rd_clock(&amp;start);<br>Decrypt (out, expkey, in);<br><br>rd_clock(&amp;stop);<br>diff = stop - start;<br>printf ("decrypt time: %d, %d cycles per byte\n", diff, diff/16);<br><br>for( idx = 0; idx &lt; 16; idx++ )<br>printf ("%.2x ", in[idx]);<br><br>printf ("\n");<br>}<br><br>void certify ()<br>{<br>uchar expkey[4 * Nb * (Nr + 1)];<br>unsigned idx, diff;<br>__int64 start, stop;<br><br>ExpandKey (key, expkey);<br>Encrypt (in, expkey, out);<br><br>rd_clock(&amp;start);<br><br>Encrypt (in, expkey, out);<br><br>rd_clock(&amp;stop);<br>diff = stop - start;<br>printf ("encrypt time: %d, %d cycles per byte\n", diff, diff/16);<br><br>for( idx = 0; idx &lt; 16; idx++ )<br>printf ("%.2x ", out[idx]);<br><br>printf ("\n");<br>Decrypt (out, expkey, in);<br>rd_clock(&amp;start);<br>Decrypt (out, expkey, in);<br><br>rd_clock(&amp;stop);<br>diff = stop - start;<br>printf ("decrypt time: %d, %d cycles per byte\n", diff, diff/16);<br><br>for( idx = 0; idx &lt; 16; idx++ )<br>printf ("%.2x ", in[idx]);<br><br>printf ("\n");<br>}<br><br>void decrypt (char *mykey, char *name)<br>{<br>uchar expkey[4 * Nb * (Nr + 1)];<br>FILE *fd = fopen (name, "rb");<br>int ch, idx = 0;<br><br>strncpy (key, mykey, sizeof(key));<br>ExpandKey (key, expkey);<br><br>while( ch = getc(fd), ch != EOF ) {<br>in[idx++] = ch;<br>if( idx % 16 )<br>continue;<br><br>Decrypt (in, expkey, out);<br><br>for( idx = 0; idx &lt; 16; idx++ )<br>putchar (out[idx]);<br>idx = 0;<br>}<br>}<br><br>void encrypt (char *mykey, char *name)<br>{<br>uchar expkey[4 * Nb * (Nr + 1)];<br>FILE *fd = fopen (name, "rb");<br>int ch, idx = 0;<br><br>strncpy (key, mykey, sizeof(key));<br>ExpandKey (key, expkey);<br><br>while( ch = getc(fd), ch != EOF ) {<br>in[idx++] = ch;<br>if( idx % 16 )<br>continue;<br><br>Encrypt (in, expkey, out);<br><br>for( idx = 0; idx &lt; 16; idx++ )<br>putchar (out[idx]);<br>idx = 0;<br>}<br><br>if( idx )<br>&nbsp; while( idx % 16 )<br>in[idx++] = 0;<br>else<br>&nbsp; return;<br><br>Encrypt (in, expkey, out);<br><br>for( idx = 0; idx &lt; 16; idx++ )<br>putchar (out[idx]);<br>}<br><br>uchar expkey[4 * Nb * (Nr + 1)];<br>void mrandom (int, char *);<br>unsigned xrandom (void);<br><br>int aescycles ()<br>{<br>__int64 start, end;<br>int t;<br><br>do {<br>rd_clock(&amp;start);<br>Encrypt (in, expkey, out);<br>rd_clock (&amp;end);<br>t = end - start;<br>} while( t&lt;= 0 || t&gt;= 4000);<br>return t;<br>}<br><br>int bestx (int b, int loops)<br>{<br>int bestx = 0, bestxt = 0;<br>int x, xt, i, j;<br><br>for( x = 0; x &lt; 256; x++ ) {<br>xt = 0;<br>for( i = 0; i &lt; loops; i++ ) {<br>for( j = 0; j &lt; 16; j++ )<br>in[j] = xrandom() &gt;&gt; 16;<br>in[b] = x;<br>xt += aescycles(); xt += aescycles(); xt += aescycles();<br>xt += aescycles(); xt += aescycles();<br>}<br>if( xt &gt; bestxt )<br>bestx = x, bestxt = xt;<br>}<br>return bestx;<br>}<br><br>void bernstein (char *seed)<br>{<br>int loops, b, j, k;<br><br>mrandom (strlen(seed), seed);<br><br>for( loops = 4; loops &lt;= 65536; loops *= 16) {<br>for( b = 0; b &lt; 16; b++ ) {<br>printf ("%.2d, %.5d loops:", b, loops);<br>for( k = 0; k &lt; 10; k++ ) {<br>for( j = 0; j &lt; 16; j++ )<br>key[j] = xrandom() &gt;&gt; 16;<br>ExpandKey (key, expkey);<br>printf (" %.2x", bestx (b, loops) ^ key[b]);<br>fflush (stdout);<br>}<br>printf ("\n");<br>}<br>}<br>}<br><br>void tables()<br>{<br>int i;<br><br>for( i = 0; i &lt; 256; i++)<br>{<br>printf("0x%.2x, ", Sbox[i] ^ Xtime2[Sbox[i]]);<br>if( !((i+1) % 16) )<br>printf("\n");<br>}<br><br>printf("\n");<br><br>for( i = 0; i &lt; 256; i++)<br>{<br>printf("0x%.2x, ", Xtime2[Sbox[i]]);<br>if ( !((i+1) % 16) )<br>printf("\n");<br>}<br>}<br><br>int main (int argc, char *argv[])<br>{<br>#ifndef unix<br>_setmode (_fileno(stdout), _O_BINARY);<br>#endif<br><br>switch( argv[1][0] ) {<br>case 'c': certify(); break;<br>case 'e': encrypt(argv[2], argv[3]); break;<br>case 'd': decrypt(argv[2], argv[3]); break;<br>case 'b': bernstein(argv[2]); break;<br>case 's': sample(); break;<br>case 't': tables(); break;<br>}<br>}<br><br>/*<br>* The package generates far better random numbers than a linear<br>* congruential generator.&nbsp; The random number generation technique<br>* is a linear feedback shift register approach.&nbsp; In this approach,<br>* the least significant bit of all the numbers in the RandTbl table<br>* will act as a linear feedback shift register, and will have period<br>* of approximately 2^96 - 1.<br>*<br>*/<br><br>#define RAND_order (7 * sizeof(unsigned))<br>#define RAND_size (96 * sizeof(unsigned))<br><br>uchar RandTbl[RAND_size + RAND_order];<br>int RandHead = 0;<br><br>/*<br>* random: x**96 + x**7 + x**6 + x**4 + x**3 + x**2 + 1<br>*<br>* The basic operation is to add to the number at the head index<br>* the XOR sum of the lower order terms in the polynomial.<br>* Then the index is advanced to the next location cyclically<br>* in the table.&nbsp; The value returned is the sum generated.<br>*<br>*/<br><br>unsigned xrandom ()<br>{<br>register unsigned fact;<br><br>if( (RandHead -= sizeof(unsigned)) &lt; 0 ) {<br>RandHead = RAND_size - sizeof(unsigned);<br>memcpy (RandTbl + RAND_size, RandTbl, RAND_order);<br>}<br><br>fact = *(unsigned *)(RandTbl + RandHead + 7 * sizeof(unsigned));<br>fact ^= *(unsigned *)(RandTbl + RandHead + 6 * sizeof(unsigned));<br>fact ^= *(unsigned *)(RandTbl + RandHead + 4 * sizeof(unsigned));<br>fact ^= *(unsigned *)(RandTbl + RandHead + 3 * sizeof(unsigned));<br>fact ^= *(unsigned *)(RandTbl + RandHead + 2 * sizeof(unsigned));<br>return *(unsigned *)(RandTbl + RandHead) += fact;<br>}<br><br>/*<br>* mrandom:<br>* Initialize the random number generator based on the given seed.<br>*<br>*/<br><br>void mrandom (int len, char *ptr)<br>{<br>unsigned short rand = *ptr;<br>int idx, bit = len * 4;<br><br>memset (RandTbl, 0, sizeof(RandTbl));<br>RandHead = 0;<br><br>while( rand *= 20077, rand += 11, bit-- )<br>if( ptr[bit &gt;&gt; 2] &amp; (1 &lt;&lt; (bit &amp; 3)) )<br>for (idx = 0; idx &lt; 5; idx++) {<br>rand *= 20077, rand += 11;<br>RandTbl[rand % 96 &lt;&lt; 2] ^= 1;<br>}<br><br>for( idx = 0; idx &lt; 96 * 63; idx++ )<br>xrandom ();<br>}<br><br/><br/>tag : <a href="/tag/AES" rel="tag">AES</a>,&nbsp;<a href="/tag/소스코드" rel="tag">소스코드</a>			 ]]> 
		</description>
		<category>Prog Skill</category>
		<category>AES</category>
		<category>소스코드</category>

		<comments>http://amplengin2.egloos.com/1482324#comments</comments>
		<pubDate>Wed, 29 Jul 2009 21:18:41 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 직장인을 위한 이메일 관리 방법 ]]> </title>
		<link>http://amplengin2.egloos.com/1477646</link>
		<guid>http://amplengin2.egloos.com/1477646</guid>
		<description>
			<![CDATA[ 
  <br>출처 : <a href="http://lunaris.egloos.com/1931734">http://lunaris.egloos.com/1931734</a><br><br>0. 스팸 메일, 바이러스나 악성 코드를 포함한 메일이 아닌 한 어떤 메일도 사본을 남겨두지 않은 상태로는 지우지 말라. 회사 생활을 하면서 주고 받는 메일은 그 자체로 '기록'으로서의 가치를 가진다. 내용이 중복된 메일이든, 일시적인 공지 메일이든, 어쨌든 지우지 마라. 물론, 당신이 회사 내의 누군가에게 보낸 메일도 마찬가지다. 언제, 누구와, 어떤 메일을 주고 받았다는 그 사실 자체가 당신의 기록으로 남아있어야 한다. 언젠가, 필요할 때 든든한 자료가 되어줄 것이다. <br><br>1. 사내 메일이 웹 메일 형태인 경우, 대개는 쿼터가 모자라서 메일을 지우게 된다. 최소한 쿼터가 모자라서 메일을 못받는 상황은 만들지 말아야 한다. (직장 생활의 에티켓이다) 하지만 언제는 메일 지우지 말라며? 당연히, 백업을 해야 한다.&nbsp; 대부분의 메일 서버는 POP3 서버를 내장하고 있으며, (대개 높으신 분의 필요에 의해) 일부 또는 전체 사용자에게 기능이 활성화되어있다. 또, 그렇지 않은 경우라도, 웬만하면&nbsp; 메시지를 eml 파일 형태로 내려받을 수 있는 기능 정도는 있다. 최악의 경우 메일들을 POP3가 되는 다른 서버로 포워딩 시켜서 받아 내려야 하는 경우도 있을 수 있겠다. 어쨌든 메일을 지우기 전에 무슨 수를 써서든 Outlook등 널리 사용되는 메일러 프로그램으로 본인 PC로 메일을 가져다 놓자. <br><br>2. 백업 이야기가 나와서 말인데, PC 밀때 파일만 백업하고 메일 백업 잊어먹는 사람들 많다. "빨래 끝은 옥시크린" 이고 "백업 끝은 메일" 이다. 중요하면 백업 작업을 시작할 때 하면 좋겠지만, 대개의 경우 백업은 오래 걸리는 작업이고 그 동안 많은 양의 메일이 도착할 가능성도 있어서 일을 두 번 하게 되는 경우가 왕왕 있다. 습관적으로 모든 백업이 끝난 후, 인터넷 선 뽑기 전에 메일을 백업하는 것을 추천한다. Outlook 을 쓰든 thunderbird 를 쓰든, 메일 데이터가 저장되는 경로는 옆사람이든 구글신에게든 물어서 꼭 파악해놓고, 가능하면 잊지 않도록 본인이 관리 가능한 영역으로 변경해두는 습관을 들이는 것도 좋다. <br><br>3. PC에서 Outlook 등의 프로그램으로 메일을 보내고 받을 때 서버와의 인증 과정에서 ID/Password가 암호화 되는지의 여부를 확인할 필요가 있다. 가급적 SSL/TLS 접속만 사용하는 것을 추천하며, 최소한 APOP, CRAM-MD5등의 인증 매커니즘을 통해 비밀번호가 암호화 되는 방식으로 접속하여야 한다. 아직도 널리 사용되는 Outlook Express의 경우, SPA를 활성화 하면 서버에서 인증을 못해주는 경우도 많고, 서버가 SSL/TLS 접속을 지원하지 않는 경우도 많아서 대개 메일 서버 관리 권한이 없는 사용자라면 애를 먹기 십상이다. 여태까지 나온 이야기를 이해할 수 없는 경우, 메일 비번은 다른 비번과 겹치지 않게 따로 설정해놓고 사용하며, 암호화를 사용하지 않는 무선 랜(맥도날드, 스타벅스, 옆 건물 AP등)에 연결된 상태에서는 절대로 이메일을 체크하지 말도록 하자. <br><br>4. 메일을 많이 주고 받는 경우, 본인에게 적절한 형태로 폴더링하고, 메일 필터링 규칙을 잘 만들어두면 관리가 훨씬 용이해진다. 본인에게 적절한 형태의 폴더링을 개발해내는 것은 본인 몫이다. 남들의 스타일을 따라가려고 애쓸 필요는 없다. 어쨌든, 문서 작성 능력만큼이나 중요한 것이 자료를 분류, 보관하는 능력이다. 고만고만한 처세술 책 읽을 시간에 본인 메일 관리할 방법이나 연구해보는 건 어떨까? <br><br>5. 혹시 서버에 쿼터가 남아 도는 행복한 환경이라면, POP3 대신 IMAP을 쓰는 것도 좋은 생각이다. 본인 컴퓨터가 바이러스 먹거나 하드 뻑나서 메일 데이터 날려먹을 확률보다는, 그래도 관리자가 공들여 관리해주는 서버가 훨씬 안정적이기 마련이다. 물론, 전술한대로, 백업은 가급적 자주 해놓도록 하자. <br><br>6. 아주 많은 사람들이 이메일 체크를 그리 자주 하지 않음에도 불구하고, 메일을 보내면 상대방이 '곧' 읽어볼 것이라고 생각하는 경향이 있다. 메일을 바로 읽어주길 바란다면 메일 보내놓고 상대에게 바로 전화를 걸자. 전화상으로 직접 이야기할 수 있을 만큼 짧은&nbsp; 내용이라도 '기록을 남기기 위해' 메일을 보내야 하는 경우는 빈번히 있을 수 있다. 어떤 메일에도 '빨리' 반응하고 싶다면 늘 메일 프로그램을 띄워놓든지, 아니면 새 메일이 도착한 경우 팝업을 띄워 알려주는 프로그램을 사용하는 것이 좋다. 아울러, 대부분의 메일 프로그램/서비스들이 제공하는 '수신확인' 기능은 아주 많은 경우에 동작하지 않기 때문에 믿어선 안된다. 실제로 수신 확인 기능을 구현하는 방법은 여러가지가 있지만 어느 것도 완벽하지 않다. <br><!--       <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"		    xmlns:dc="http://purl.org/dc/elements/1.1/"		    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">       <rdf:Description	        rdf:about="http://lunaris.egloos.com/1931734"	        dc:identifier="http://lunaris.egloos.com/1931734"	        dc:title="직장인을 위한 이메일 관리 방법 "	        trackback:ping="http://lunaris.egloos.com/tb/1931734"/>       </rdf:RDF>       --><br/><br/>tag : <a href="/tag/직장인" rel="tag">직장인</a>,&nbsp;<a href="/tag/관리" rel="tag">관리</a>,&nbsp;<a href="/tag/이메일" rel="tag">이메일</a>,&nbsp;<a href="/tag/방법" rel="tag">방법</a>			 ]]> 
		</description>
		<category>amplengin2</category>
		<category>직장인</category>
		<category>관리</category>
		<category>이메일</category>
		<category>방법</category>

		<comments>http://amplengin2.egloos.com/1477646#comments</comments>
		<pubDate>Fri, 24 Jul 2009 16:49:15 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ “지갑 잘 분실한다면 ‘이것’을 넣어둬라”  ]]> </title>
		<link>http://amplengin2.egloos.com/1467045</link>
		<guid>http://amplengin2.egloos.com/1467045</guid>
		<description>
			<![CDATA[ 
  <div id="NewsAdContent"><div id="CLtag"><div id="articleContent" class="08_vtext">출처 : <a href="http://nownews.seoul.co.kr/news/newsView.php?id=20090713601009">http://nownews.seoul.co.kr/news/newsView.php?id=20090713601009</a><br><table border="0" cellspacing="3" cellpadding="3" width="450" align="center"><tbody><tr><td><table border="0" cellspacing="0" cellpadding="0" align="left"><tbody><tr><td><img border="0" src="http://imgnn.seoul.co.kr/img//upload/2009/07/13/SSI_20090713154907_V.jpg"></td></tr><tr><td height="2"></td></tr><tr><td style="PADDING-BOTTOM: 5px; PADDING-LEFT: 5px; PADDING-RIGHT: 5px; PADDING-TOP: 6px" class="teal" bgcolor="#f1f1f1"></td></tr></tbody></table></td></tr></tbody></table><!-- 포토 끝 -->길가에 떨어진 지갑을 발견했을 때, 사람들의 반응은 다양하다. 그대로 두거나 경찰서로 가져가거나 또는 <span style="Z-INDEX: 999; DISPLAY: inline" id="CLK_POP0" onmouseover="javascript:clear_pop_hidden_delay()"><a style="COLOR: #3d46a8; TEXT-DECORATION: underline" class="popup_link" onmouseover="javascript:KL_show_clk_pop('%BF%EC%C3%BC%C5%EB','0','')" onmouseout="javascript:clear_pop_show_delay()" href="http://sense.contentlink.co.kr/sense/clk_pop.php?afd=seoul2_web&amp;is_click=yes&amp;keyword=%BF%EC%C3%BC%C5%EB" target="_blank">우체통</a></span>에 넣기도 하지만 본인의 지갑인 양 ‘꿀꺽’ 하는 경우도 많다. <p>하지만 지갑 속에서 ‘이것’을 발견한 사람은 대부분 지갑을 돌려준다는 연구결과가 발표됐다. <p>영국 하트퍼트셔 대학 연구팀이 지난 한 해 동안 사람들로 북적이는 에딘버그(Edinburgh) 한복판에 지갑 240개를 던져두고 사람들의 반응을 지켜봤다. <p>지갑 속에는 웃고 있는 아기사진, 귀여운 강아지 사진, <span style="Z-INDEX: 999; DISPLAY: inline" id="CLK_POP3" onmouseover="javascript:clear_pop_hidden_delay()"><a style="COLOR: #3d46a8; TEXT-DECORATION: underline" class="popup_link" onmouseover="javascript:KL_show_clk_pop('%C7%E0%BA%B9','3','')" onmouseout="javascript:clear_pop_show_delay()" href="http://sense.contentlink.co.kr/sense/clk_pop.php?afd=seoul2_web&amp;is_click=yes&amp;keyword=%C7%E0%BA%B9" target="_blank">행복</a></span>한 중년 부부의 사진과 가족사진 등이 담겨 있다. 또 어떤 지갑에는 사진을 넣지 않거나, 지갑의 주인이 <span style="Z-INDEX: 999; DISPLAY: inline" id="CLK_POP1" onmouseover="javascript:clear_pop_hidden_delay()"><a style="COLOR: #3d46a8; TEXT-DECORATION: underline" class="popup_link" onmouseover="javascript:KL_show_clk_pop('%B1%E2%BA%CE','1','')" onmouseout="javascript:clear_pop_show_delay()" href="http://sense.contentlink.co.kr/sense/clk_pop.php?afd=seoul2_web&amp;is_click=yes&amp;keyword=%B1%E2%BA%CE" target="_blank">기부</a></span>활동을 한다는 카드를 넣어두기도 했다. <p>그 결과 총 42%의 지갑이 우편을 통해 되돌아왔으며, 아기사진이 든 지갑의 회수율은 무려 88%에 달했다. <p>뒤를 이어 강아지 사진이 든 지갑은 53%, 가족 사진과 행복한 중년 부부의 사진이 든 지갑은 각각 48%, 28%가 돌아왔다. <p>또 기부활동 카드가 든 지갑은 그렇지 않은 지갑에 비해 15~20% 포인트 더 많이 되돌아왔다. <p><span style="Z-INDEX: 999; DISPLAY: inline" id="CLK_POP2" onmouseover="javascript:clear_pop_hidden_delay()"><a style="COLOR: #3d46a8; TEXT-DECORATION: underline" class="popup_link" onmouseover="javascript:KL_show_clk_pop('%C0%FC%B9%AE%B0%A1','2','')" onmouseout="javascript:clear_pop_show_delay()" href="http://sense.contentlink.co.kr/sense/clk_pop.php?afd=seoul2_web&amp;is_click=yes&amp;keyword=%C0%FC%B9%AE%B0%A1" target="_blank">전문가</a></span>들은 아기사진이 든 지갑의 회수율이 높은 이유가 미래 세대인 아이를 안전하게 보호하려는 동정심 때문인 것으로 해석하고 있다. <p>심리학자인 리차드 와이즈먼 박사는 “이 결과는 사람들이 아기를 돌봐야 할 대상으로 인식하는 행동성향과 연관이 있다.”고 분석했다. 또 절반에 가까운 지갑이 되돌아 왔다는 사실에 매우 놀라움을 표했다. <p>와이즈먼 박사는 “지갑을 잘 잃어버리는 사람이라면, 만약을 대비해 잘 보이는 곳에 아기 사진을 넣어두길 권한다.”고 덧붙였다. <p>사진=flickr.com <p>서울신문 나우뉴스 송혜민 기자 <a href="mailto:huimin0217@seoul.co.kr">huimin0217@seoul.co.kr</a></p></div></div></div><!-- / datawave 콘텐츠링크 시작 --><div align="right"><font class="lightgrey8">기사일자 : 2009-07-13</font>&nbsp;&nbsp;</div><p style="MARGIN-TOP: 30px"></p><!--//////////////////뷰 본문 end////////////////////////--><br/><br/>tag : <a href="/tag/지갑" rel="tag">지갑</a>			 ]]> 
		</description>
		<category>amplengin2</category>
		<category>지갑</category>

		<comments>http://amplengin2.egloos.com/1467045#comments</comments>
		<pubDate>Tue, 14 Jul 2009 00:18:52 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [MFC]다이나믹 버튼 ]]> </title>
		<link>http://amplengin2.egloos.com/1436276</link>
		<guid>http://amplengin2.egloos.com/1436276</guid>
		<description>
			<![CDATA[ 
  more information link <a href="http://www.codeproject.com/KB/buttons/cbuttonst.aspx">http://www.codeproject.com/KB/buttons/cbuttonst.aspx</a><br><br><img alt="Sample Image" src="http://www.codeproject.com/KB/buttons/cbuttonst/cbuttonst1.png" width="459" height="252"> <img alt="Sample Image" src="http://www.codeproject.com/KB/buttons/cbuttonst/cbuttonst2.png" width="459" height="252"> <img alt="Sample Image" src="http://www.codeproject.com/KB/buttons/cbuttonst/cbuttonst3.png" width="459" height="252"> <img alt="Sample Image" src="http://www.codeproject.com/KB/buttons/cbuttonst/cbuttonst4.png" width="459" height="252"> <br/><br/>tag : <a href="/tag/button" rel="tag">button</a>,&nbsp;<a href="/tag/buttonst" rel="tag">buttonst</a>			 ]]> 
		</description>
		<category>Prog Skill</category>
		<category>button</category>
		<category>buttonst</category>

		<comments>http://amplengin2.egloos.com/1436276#comments</comments>
		<pubDate>Sun, 14 Jun 2009 05:51:20 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [MFC]시스템 핫키 등록 ]]> </title>
		<link>http://amplengin2.egloos.com/1436252</link>
		<guid>http://amplengin2.egloos.com/1436252</guid>
		<description>
			<![CDATA[ 
  출처 : <a href="http://panboy.tistory.com/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D">http://panboy.tistory.com/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</a><br><br><p>RegisterHotKey 사용법...</p><p>1. 시작 시기에 걸맞는 곳에다 코딩한다.</p><p>&nbsp; &nbsp;예를 들어 CMainFrame의 OnCreate에 코딩한다고 하고, Ctrl + P를 핫키로 하겠다면</p><p>&nbsp; &nbsp;멤버 변수로 int m_nHotKeyID;</p><p>&nbsp; &nbsp;m_nHotKeyID = ::GlobalAddAtom("test");</p><p>&nbsp; &nbsp;if(!::RegisterHotKey(GetSafeHwnd(), m_nHotKeyID, MOD_CONTROL, 'P'))</p><p>&nbsp; &nbsp; &nbsp; &nbsp;AfxMessageBox("핫키 등록 실패!");</p><p>2. CMainFrame에 afx_msg LONG OnHotKey(WPARAM wParam, LPARAM lParam)함수 추가하고</p><p>&nbsp; &nbsp;메시지맵에 ON_MESSAGE(WM_HOTKEY, OnHotKey)</p><p>&nbsp; &nbsp;한다. 이 때 //}}AFX_MSG_MAP 바깥에 한다.</p><p>&nbsp; &nbsp;LONG CMainFrame::OnHotKey(WPARAM wParam, LPARAM lParam)<br>&nbsp; &nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp;if((int)wParam == m_nHotKeyID)<br>&nbsp; &nbsp; &nbsp; &nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 하고 싶은 일 구현<br>&nbsp; &nbsp; &nbsp; &nbsp;}<br>&nbsp; &nbsp;}</p><p>3. 종료할 때 핫키를 해제한다.</p><p>&nbsp; &nbsp;void CMainFrame::OnClose()<br>&nbsp; &nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp;::UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID);<br>&nbsp; &nbsp;} </p><br/><br/>tag : <a href="/tag/hotkey" rel="tag">hotkey</a>,&nbsp;<a href="/tag/register" rel="tag">register</a>,&nbsp;<a href="/tag/system" rel="tag">system</a>			 ]]> 
		</description>
		<category>Prog Skill</category>
		<category>hotkey</category>
		<category>register</category>
		<category>system</category>

		<comments>http://amplengin2.egloos.com/1436252#comments</comments>
		<pubDate>Sun, 14 Jun 2009 05:28:44 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Diffie-Hellman 키 분배 알고리즘 ]]> </title>
		<link>http://amplengin2.egloos.com/1424127</link>
		<guid>http://amplengin2.egloos.com/1424127</guid>
		<description>
			<![CDATA[ 
  <p>출처 : <a style="COLOR: #666666" href="http://www.eduhacker.co.kr/" target="_blank"><strong><span style="COLOR: #0000ff">네트워크,보안계열,IT취업 관련사이트</span></strong></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://blog.etnews.co.kr/ppyspyss/172415">http://blog.etnews.co.kr/ppyspyss/172415</a><br><br>Public Key 암호화 기법을 제안한 Diffie-Hellman은 이 기법에서 생성된 키를 안전 <br>하게 송/수신자들에게 분배하는 알고리즘을 제안하였다. 즉, 이 알고리즘은 비밀키 <br>와 공개키를 생성하여 암호화와 복호화를 수행하는 방식에 관한 알고리즘이 아니라 <br>메세지를 주고 받으려는 두 명의 사람이 비밀리에 비밀키를 공유하기 위한 방법이라 <br>는 것을 잊지 말도록 하자. 현재 이 방식은 상용 보안 소프트웨어에 널리 사용되고 <br>있다 </p><p>&nbsp;</p><p>Diffie-Hellman의 키분배 알고리즘을 간단하게 설명하면 다음과 같다. </p><p>&nbsp;</p><p>&lt;전제 조건&gt; </p><p><br>n,g : 크기가 큰 정수들로서 메세지의 송수신에 참여하는 모든 사람들에게 공개되어 <br>있다. 그리고 특히 g값은 n보다는 작고 1보다는 크다. </p><p>&nbsp;</p><p>1.송신자는 비교적 크기가 큰 난수 x를 발생시키고 이 값을 보관한다. </p><p><br>2.수신자 역시 비교적 크기가 큰 난수 y를 발생시키고 이값을 보관한다. </p><p><br>3.송신자는 다음의 계산을 하여 그 결과를 수신자에게 보낸다. <br>X = gx mod n </p><p><br>4.수신자는 다음의 계산을 하여 그 결과를 송신자에게 보낸다. <br>Y = gy mod n </p><p><br>5.송신자는 Y를 받아서 다음의 계산을 한 후 비밀키 Ks를 얻는다. <br>Ks = (Y)x mod n = gyx mod n </p><p><br>6.수신자는 X를 받아서 다음의 계산을 한 후 비밀키 Kr을 얻는다. <br>Kr = (X)y mod n = gxy mod n </p><p><br>위의 (e)와 (f)에서 계산된 결과인 Ks와 Kr이 같은 값을 갖는다는 것을 쉽게 알 수 <br>있을것이다. 따라서 송신자와 수신자는 이 값을 비밀키로하여 메세지를 암호화/복호 <br>화할 수 있게 된다. </p><p><br>계산된 비밀키(Kr 또는 Ks)가 왜 비밀키인가? 라고 의아해 할 독자를 위해 위의 과 <br>정을 정리하면 다음과 같다. </p><p>&nbsp;</p><p>◆수신자와 송신자가 주고 받는 값들(즉 공격자에게 노출될 가능성이 많은 값들) <br>X(=gx), Y(=gy) </p><p>&nbsp;</p><p>◆모든 사람들이 다 알고 있는 값들(즉, 공격자도 이미 다 알고 있는 값들) <br>n, g </p><p>&nbsp;</p><p>◆송신자만이 알고 있는 값(그래서 안전하다고 생각되는 값) <br>x </p><p>&nbsp;</p><p>◆수신자만이 알고 있는 값(그래서 안전하다고 생각되는 값) <br>y </p><p>&nbsp;</p><p>따라서 공격자가 최대한으로 얻을 수 있는 정보는 n, g, X, Y이다. 공격자들이 비밀 <br>키를 계산하기 위해서는 x 또는 y의 값을 알아야 한다. 이 값을 알기 위해서는 다음 <br>의 계산에서 x 또는 y를 구해야 한다. </p><p>X = gx mod n <br>Y = gy mod n </p><p>&nbsp;</p><p>위의 식에 있어서 (X, g, n), (Y, g, n)을 알고 있고 n이 충분히 클 경우 x, y를 <br>구하는 것은 수학적으로 불가능(infeasible)하다고 알려져 있다(일방향 함수의 특성 <br>). 따라서 비밀키(Kr, Ks)는 비밀키이다. </p><p>&nbsp;</p><p>그러나 Diffie-Hellman의 알고리즘을 공략할 수 있는 공격방법이 없는 것없는 것은 <br>아니다. 즉, 알고리즘 자체는 수학적으로 안전하다고 할 수 있지만 사실 암호 프로 <br>토콜중에 헛점(security hole)이 없는 것은 아무것도 없다. 소위 흉내내기 공격법(i <br>mpersonation attack)이란 것이 Diffie-Hellman 키 분배 프로토콜의 공격방법이다. </p><p>즉, 공격자가 송신자와 수신자의 사이에서 "송신자에게는 공격자 자신이 수신자인 <br>것처럼" 그리고 "수신자에게는 공격자 자신이 송신자인 것처럼" 속이는 방법이다. <br>이방법은 다음과 같이 이루어진다. </p><p>&nbsp;</p><p>&lt;전제 조건&gt; </p><p><br>공격자는 송신자와 수신자가 주고 받는 모든 데이타를 얻을 수 있다. </p><p><br>1.공격자는 송신자가 보낸 X값을 가로채서 보관하고 자신이 생성시킨 난수값 z을 이 <br>용하여 Z를 송신자와 수신자에게 보낸다. <br>Z = gz mod n </p><p><br>2.공격자는 수신자로부터 Y값을 얻는다. </p><p><br>3.송신자와 수신자는 자신들이 얻은 값 Z를 이용하여 다음의 비밀키를 생성한다. <br>송신자 : Kxz = gxz mod n <br>수신자 : Kzy = gzy mod n </p><p><br>4.공격자는 (b)에서 얻은 X, Y 값을 이용하여 다음의 비밀키를 계산할 수 있다. <br>송신자용 비밀키 : gzx mod n <br>수신자용 비밀키 : gzy mod n </p><p>&nbsp;</p><p>결과적으로 Kxz와 Kzy라는 두개의 비밀키가 생성되어 전자는 송신자와 공격자가 통 <br>신을 하는 데 사용되고 후자는 공격자와 수신자가 통신을 하는데 사용된다. 당연히 <br>송신자와 수신자는 서로가 서로에게 메세지를 안전하게(?) 주고 받는 다고 착각을 <br>하고 있게 된다.</p><br/><br/>tag : <a href="/tag/diffie-hellman" rel="tag">diffie-hellman</a>,&nbsp;<a href="/tag/security" rel="tag">security</a>,&nbsp;<a href="/tag/key" rel="tag">key</a>,&nbsp;<a href="/tag/public" rel="tag">public</a>,&nbsp;<a href="/tag/키분배" rel="tag">키분배</a>,&nbsp;<a href="/tag/분배" rel="tag">분배</a>			 ]]> 
		</description>
		<category>etc</category>
		<category>diffie-hellman</category>
		<category>security</category>
		<category>key</category>
		<category>public</category>
		<category>키분배</category>
		<category>분배</category>

		<comments>http://amplengin2.egloos.com/1424127#comments</comments>
		<pubDate>Tue, 02 Jun 2009 12:49:44 GMT</pubDate>
		<dc:creator>amplengin2</dc:creator>
	</item>
</channel>
</rss>
