Vulnerabilities
야후 웹메일 취약점
IE 6.0 DoS 취약점
[HL2003-124]Microsoft Messenger 서비스 버퍼오버플로우 취약점
[HL2003-122]HP HP-UX dtprintinfo DISPLAY 환경변수 버퍼오버플로우 취약점
[HL2003-121]Sun Solaris aspppls의 임시화일 생성오류
Section Stories
머피의 법칙 그 유래를 찾아서 4부작 2편
지구상에서 가장 빠른 사나이(2편) 우리가 이제껏 알고 있는 머피에 법칙에 관한 모든 것은 잘못된 것이다. ...
얼음렌즈로 불 붙이기
호수나 샘에서 깨끗한 물을 퍼 온다. 물 속 가스가 제거되도록 약 10 분 간 끓인다. 그런 뒤 은박지 호일을 접어 약 5cm 정도 깊이의 접시를 만들어 물을 담고 천천히 얼린다. 아니면, 판매하 ...
머피의 법칙, 그 유래를 찾아서 4부작 1편
"세상에 어떻게 이럴 수가... 나는 도대체 되는 일이 하나 없는지..." 머피의 법칙이 뭔지는 알면서도 막상 그 유래에 관해서는 여러가지 설이 분분합니다. 희귀한 연구 결과를 주로 싣는 핫에어 사이트에 "머피의 ...
no. title name date reply
12060 C언어로 된 SEED speedofone 2005/10/27 0
한국 표준 암호인 SEED 인데여
각주로 이 함수가 무엇인지(코드의 내용) 써주시면 감사감사~~~
메일로 보내주세여~~~ (ya810816@yaoo.co.kr)

내용1 ( Seedx.h 파일의 내용)

/*******************************************************************************
*
* FILE: seedx.h
*
* DESCRIPTION: header file for seedx.c
*
*******************************************************************************/

#ifndef SEED_H
#define SEED_H

/********************** Include files ************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/********************* Type Definitions **********************/

#ifndef TYPE_DEFINITION
#define TYPE_DEFINITION
#if defined(__alpha)
typedef unsigned int DWORD;
typedef unsigned short WORD;
#else
typedef unsigned long int DWORD;
typedef unsigned short int WORD;
#endif
typedef unsigned char BYTE;
#endif


/******************* Constant Definitions *********************/

#define NoRounds 16
#define NoRoundKeys (NoRounds*2)
#define SeedBlockSize 16 /* in bytes */
#define SeedBlockLen 128 /* in bits */


/********************** Common Macros ************************/

#if defined(_MSC_VER)
#define ROTL(x, n) (_lrotl((x), (n)))
#define ROTR(x, n) (_lrotr((x), (n)))
#else
#define ROTL(x, n) (((x) << (n)) | ((x) >> (32-(n))))
#define ROTR(x, n) (((x) >> (n)) | ((x) << (32-(n))))
#endif


/**************** Function Prototype Declarations **************/

#ifndef PROTOTYPES
#define PROTOTYPES 1
#endif

#if PROTOTYPES
#define PROTO_LIST(list) list
#else
#define PROTO_LIST(list) ()
#endif

void SeedEncrypt
PROTO_LIST((BYTE *pbData, DWORD *pdwRoundKey));
void SeedDecrypt
PROTO_LIST((BYTE *pbData, DWORD *pdwRoundKey));
void SeedEncRoundKey
PROTO_LIST((DWORD *pdwRoundKey, BYTE *pbUserKey));
void SeedDecRoundKey
PROTO_LIST((DWORD *pdwRoundKey, BYTE *pbUserKey));

/******************************************************************/
#endif

내용2 (Seedx-1.c 파일의 내용)

/*******************************************************************************
* 1999. 6.29.
* FILE: seedx.c
*
* DESCRIPTION: Core routines for the enhanced SEED
*
*******************************************************************************/

#include "seedx.h"
#include "seedx.tab"
//---------------------------------------------------------------------------

/******************* Encryption/Decryption *******************/

#define GetB0(A) ( (BYTE)((A) ) )
#define GetB1(A) ( (BYTE)((A)>> 8) )
#define GetB2(A) ( (BYTE)((A)>>16) )
#define GetB3(A) ( (BYTE)((A)>>24) )

#define SeedRound(L0, L1, R0, R1, K) { \
T0 = R0 ^ (K)[0]; \
T1 = R1 ^ (K)[1]; \
T1 ^= T0; \
T1 = SS0[GetB0(T1)] ^ SS1[GetB1(T1)] ^ \
SS2[GetB2(T1)] ^ SS3[GetB3(T1)]; \
T0 += T1; \
T0 = SS0[GetB0(T0)] ^ SS1[GetB1(T0)] ^ \
SS2[GetB2(T0)] ^ SS3[GetB3(T0)]; \
T1 += T0; \
T1 = SS0[GetB0(T1)] ^ SS1[GetB1(T1)] ^ \
SS2[GetB2(T1)] ^ SS3[GetB3(T1)]; \
T0 += T1; \
L0 ^= T0; L1 ^= T1; \
}


#define EndianChange(dwS) \
( (ROTL((dwS), 8) & (DWORD)0x00ff00ff) | \
(ROTL((dwS), 24) & (DWORD)0xff00ff00) )


/************************ Block Encryption *************************/
void SeedEncrypt(BYTE *pbData, DWORD *pdwRoundKey)
{
DWORD L0, L1, R0, R1, T0, T1, *K = pdwRoundKey;

L0 = ((DWORD *)pbData)[0];
L1 = ((DWORD *)pbData)[1];
R0 = ((DWORD *)pbData)[2];
R1 = ((DWORD *)pbData)[3];
#ifndef BIG_ENDIAN
L0 = EndianChange(L0);
L1 = EndianChange(L1);
R0 = EndianChange(R0);
R1 = EndianChange(R1);
#endif

SeedRound(L0, L1, R0, R1, K ); /* 1 */
SeedRound(R0, R1, L0, L1, K+ 2); /* 2 */
SeedRound(L0, L1, R0, R1, K+ 4); /* 3 */
SeedRound(R0, R1, L0, L1, K+ 6); /* 4 */
SeedRound(L0, L1, R0, R1, K+ 8); /* 5 */
SeedRound(R0, R1, L0, L1, K+10); /* 6 */
SeedRound(L0, L1, R0, R1, K+12); /* 7 */
SeedRound(R0, R1, L0, L1, K+14); /* 8 */
SeedRound(L0, L1, R0, R1, K+16); /* 9 */
SeedRound(R0, R1, L0, L1, K+18); /* 10 */
SeedRound(L0, L1, R0, R1, K+20); /* 11 */
SeedRound(R0, R1, L0, L1, K+22); /* 12 */
#if NoRounds == 16
SeedRound(L0, L1, R0, R1, K+24); /* 13 */
SeedRound(R0, R1, L0, L1, K+26); /* 14 */
SeedRound(L0, L1, R0, R1, K+28); /* 15 */
SeedRound(R0, R1, L0, L1, K+30); /* 16 */
#endif

#ifndef BIG_ENDIAN
L0 = EndianChange(L0);
L1 = EndianChange(L1);
R0 = EndianChange(R0);
R1 = EndianChange(R1);
#endif
((DWORD *)pbData)[0] = R0;
((DWORD *)pbData)[1] = R1;
((DWORD *)pbData)[2] = L0;
((DWORD *)pbData)[3] = L1;
}


/* same as encrypt, except that round keys are applied in reverse order. */
void SeedDecrypt(BYTE *pbData, DWORD *pdwRoundKey)
{
DWORD L0, L1, R0, R1, T0, T1, *K=pdwRoundKey;

L0 = ((DWORD *)pbData)[0];
L1 = ((DWORD *)pbData)[1];
R0 = ((DWORD *)pbData)[2];
R1 = ((DWORD *)pbData)[3];
#ifndef BIG_ENDIAN
L0 = EndianChange(L0);
L1 = EndianChange(L1);
R0 = EndianChange(R0);
R1 = EndianChange(R1);
#endif

#if NoRounds == 16
SeedRound(L0, L1, R0, R1, K+30); /* 1 */
SeedRound(R0, R1, L0, L1, K+28); /* 2 */
SeedRound(L0, L1, R0, R1, K+26); /* 3 */
SeedRound(R0, R1, L0, L1, K+24); /* 4 */
#endif
SeedRound(L0, L1, R0, R1, K+22); /* 5 */
SeedRound(R0, R1, L0, L1, K+20); /* 6 */
SeedRound(L0, L1, R0, R1, K+18); /* 7 */
SeedRound(R0, R1, L0, L1, K+16); /* 8 */
SeedRound(L0, L1, R0, R1, K+14); /* 9 */
SeedRound(R0, R1, L0, L1, K+12); /* 10 */
SeedRound(L0, L1, R0, R1, K+10); /* 11 */
SeedRound(R0, R1, L0, L1, K+ 8); /* 12 */
SeedRound(L0, L1, R0, R1, K+ 6); /* 13 */
SeedRound(R0, R1, L0, L1, K+ 4); /* 14 */
SeedRound(L0, L1, R0, R1, K+ 2); /* 15 */
SeedRound(R0, R1, L0, L1, K+ 0); /* 16 */

#ifndef BIG_ENDIAN
L0 = EndianChange(L0);
L1 = EndianChange(L1);
R0 = EndianChange(R0);
R1 = EndianChange(R1);
#endif
((DWORD *)pbData)[0] = R0;
((DWORD *)pbData)[1] = R1;
((DWORD *)pbData)[2] = L0;
((DWORD *)pbData)[3] = L1;
}



/******************** Key Scheduling **********************/

/* Constants for key schedule:
KC0 = golden ratio; KCi = ROTL(KCi-1, 1) */
#define KC0 0x9e3779b9UL
#define KC1 0x3c6ef373UL
#define KC2 0x78dde6e6UL
#define KC3 0xf1bbcdccUL
#define KC4 0xe3779b99UL
#define KC5 0xc6ef3733UL
#define KC6 0x8dde6e67UL
#define KC7 0x1bbcdccfUL
#define KC8 0x3779b99eUL
#define KC9 0x6ef3733cUL
#define KC10 0xdde6e678UL
#define KC11 0xbbcdccf1UL
#if NoRounds == 16
#define KC12 0x779b99e3UL
#define KC13 0xef3733c6UL
#define KC14 0xde6e678dUL
#define KC15 0xbcdccf1bUL
#endif

#define EncRoundKeyUpdate0(K, A, B, C, D, KC) { \
T0 = A; \
A = (A>>8) ^ (B<<24); \
B = (B>>8) ^ (T0<<24); \
T0 = A + C - KC; \
T1 = B + KC - D; \
(K)[0] = SS0[GetB0(T0)] ^ SS1[GetB1(T0)] ^ \
SS2[GetB2(T0)] ^ SS3[GetB3(T0)]; \
(K)[1] = SS0[GetB0(T1)] ^ SS1[GetB1(T1)] ^ \
SS2[GetB2(T1)] ^ SS3[GetB3(T1)]; \
}


#define EncRoundKeyUpdate1(K, A, B, C, D, KC) { \
T0 = C; \
C = (C<<8) ^ (D>>24); \
D = (D<<8) ^ (T0>>24); \
T0 = A + C - KC; \
T1 = B + KC - D; \
(K)[0] = SS0[GetB0(T0)] ^ SS1[GetB1(T0)] ^ \
SS2[GetB2(T0)] ^ SS3[GetB3(T0)]; \
(K)[1] = SS0[GetB0(T1)] ^ SS1[GetB1(T1)] ^ \
SS2[GetB2(T1)] ^ SS3[GetB3(T1)]; \
}


/* Encryption key schedule */
void SeedEncRoundKey(DWORD *pdwRoundKey, BYTE *pbUserKey)
{
DWORD A, B, C, D, T0, T1, *K=pdwRoundKey;

A = ((DWORD *)pbUserKey)[0];
B = ((DWORD *)pbUserKey)[1];
C = ((DWORD *)pbUserKey)[2];
D = ((DWORD *)pbUserKey)[3];
#ifndef BIG_ENDIAN
A = EndianChange(A);
B = EndianChange(B);
C = EndianChange(C);
D = EndianChange(D);
#endif

T0 = A + C - KC0;
T1 = B - D + KC0;
K[0] = SS0[GetB0(T0)] ^ SS1[GetB1(T0)] ^
SS2[GetB2(T0)] ^ SS3[GetB3(T0)];
K[1] = SS0[GetB0(T1)] ^ SS1[GetB1(T1)] ^
SS2[GetB2(T1)] ^ SS3[GetB3(T1)];

EncRoundKeyUpdate0(K+ 2, A, B, C, D, KC1 );
EncRoundKeyUpdate1(K+ 4, A, B, C, D, KC2 );
EncRoundKeyUpdate0(K+ 6, A, B, C, D, KC3 );
EncRoundKeyUpdate1(K+ 8, A, B, C, D, KC4 );
EncRoundKeyUpdate0(K+10, A, B, C, D, KC5 );
EncRoundKeyUpdate1(K+12, A, B, C, D, KC6 );
EncRoundKeyUpdate0(K+14, A, B, C, D, KC7 );
EncRoundKeyUpdate1(K+16, A, B, C, D, KC8 );
EncRoundKeyUpdate0(K+18, A, B, C, D, KC9 );
EncRoundKeyUpdate1(K+20, A, B, C, D, KC10);
EncRoundKeyUpdate0(K+22, A, B, C, D, KC11);
#if NoRounds == 16
EncRoundKeyUpdate1(K+24, A, B, C, D, KC12);
EncRoundKeyUpdate0(K+26, A, B, C, D, KC13);
EncRoundKeyUpdate1(K+28, A, B, C, D, KC14);
EncRoundKeyUpdate0(K+30, A, B, C, D, KC15);
#endif
}

/************************ END ****************************/


끝.......
부탁 드려여~~~~
[12074] [12069] [12066] [12064] [12061] [12060] [12059] [12055] [12053] [12050] [12045]

List | Reply | Modify | Delete | Write
F.H.Z Server 접속자
2013/06/20 07:31 AM
DRILL 23명 / IRC 6명
Errata
BBUWOO


시작하는 모든 사람들을 위한 필독서 "질문은 어떻게 하는것이 좋은가"로 "시원한데 긁어줬다", 혹은 "너 잘났다"는 등의 극에서 극을 달리는 반응으로 리눅스계에 일대 센세이션을 일으켰던 장본인, OOPS.ORG를 통해 약 1만 8천...
Book Review
Spidering Hacks


[Anonymous님 曰] 서핑만으로는 부족하다고 느껴질 때가 있는 법이다. 좋아하는 책이 판매순위 몇위인가를 체크하는 것도 지겹고, 다운로드하...
Free Hacking Zone
Copyright © 1999-2003 by (주)해커스랩
개인정보 보호 정책