Основы криптографии

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



>

x00000100,

x04010104,

x04000100,

x00000104,

x04010000,

x00000004,

x04000000,

x00010104,

x00010000,

x00010100,

x00000104,

x04000104,

x04010100,

x04010004,

x00010100,

x00000100,

x04010004,

x04000000,

x04010104,

x00010000,

x00000004,

x00010104,

x00000004,

x04000100,

x04010000,

x00000100,

x00010104,

x00010004,

x00000000,

x00010000,

x04000100,

x04010104,

x00010004,

x04000004,

x00010000,

x00000000,

x04000104,

x04010004,

x00000100,

x00000004,

x04010104,

x04000000,

x04010100,

x00010100,

x04000004,

x00000104,

x04010004,

x04010000,

x00000104,

x04010100,

x04000000,

x04000104,

x00010100,

//; sp[3]

x00104080,

x40100080,

x40100080,

x40000000,

x40104000,

x40004080,

x00004080,

x00100080,

x00000000,

x00104000,

x00104000,

x40104080,

x40000080,

x00000000,

x40004000,

x00004080,

x00000080,

x00100000,

x00004000,

x00104080,

x40000000,

x00004000,

x00100080,

x40100000,

x40004080,

x00000080,

x40100000,

x40004000,

x00100000,

x40104000,

x40104080,

x40000080,

x40004000,

x00004080,

x00104000,

x40104080,

x40000080,

x00000000,

x00000000,

x00104000,

x40100000,

x40004000,

x40004080,

x00000080,

x00104080,

x40100080,

x40100080,

x40000000,

x40104080,

x40000080,

x00000080,

x00100000,

x00004080,

x00100080,

x40104000,

x40004080,

x00100080,

x40100000,

x00004000,

x00104080,

x40000000,

x00004000,

x00100000,

x40104000,

//; sp[4]

x80000000,

x80000401,

x00000401,

x80000021,

x00000400,

x80000000,

x00000020,

x00000401,

x80000420,

x00000400,

x80000001,

x80000420,

x80000021,

x00000421,

x80000400,

x00000020,

x00000001,

x00000420,

x00000420,

x00000000,

x80000020,

x80000421,

x80000421,

x80000001,

x00000421,

x80000020,

x00000000,

x00000021,

x80000401,

x00000001,

x00000021,

x80000400,

x00000400,

x80000021,

x80000000,

x00000001,

x00000020,

x00000401,

x80000021,

x80000420,

x80000001,

x00000020,

x00000421,

x80000401,

x80000420,

x80000000,

x00000001,

x00000421,

x80000421,

x80000400,

x00000021,

x80000421,

x00000401,

x00000000,

x00000420,

x00000021,

x80000400,

x80000001,

x80000020,

x00000400,

x00000000,

x00000420,

x80000401,

x80000020,

//; sp[5]

x08000010,

x00002010,

x00200000,

x08202010,

x00002010,

x08000000,

x08202010,

x00002000,

x00200010,

x08202000,

x00002000,

x08000010,

x08002000,

x00200010,

x00000010,

x08200000,

x00000000,

x08002000,

x08200010,

x00200000,

x00202000,

x08200010,

x08000000,

x08002010,

x08002010,

x00000000,

x08202000,

x00202010,

x08200000,

x00202000,

x00202010,

x00000010,

x00200010,

x08000000,

x08002010,

x00202000,

x08202010,

x00002000,

x08200000,

x08000010,

x00002000,

x00200010,

x00000010,

x08200000,

x08000010,

x08202010,

x00202000,

x00002010,

x08202000,

x00202010,

x00000000,

x08002010,

x08000000,

x00200000,

x00002010,

x08202000,

x00200000,

x08002000,

x08200010,

x00000000,

x00202010,

x00000010,

x08002000,

x08200010,

//; sp[6]

x00001000,

x01001002,

x01040002,

x00000000,

x00040000,

x01040002,

x01041000,

x00041002,

x01041002,

x00001000,

x00000000,

x01000002,

x01000000,

x00000002,

x01001002,

x01040000,

x00040002,

x01041000,

x01001000,

x00040002,

x01000002,

x00001002,

x00041002,

x01001000,

x00001002,

x00040000,

x01040000,

x01041002,

x00041000,

x01000000,

x00000002,

x00041000,

x00000002,

x00041000,

x00001000,

x01040002,

x01040002,

x01001002,

x01001002,

x01000000,

x01001000,

x00000002,

x00040002,

x00001000,

x00041002,

x01040000,

x01041000,

x00041002,

x01040000,

x01000002,

x01041002,

x00001002,

x00041000,

x00000000,

x01000000,

x01041002,

x00000000,

x01041000,

x00001002,

x00040000,

x01000002,

x00040002,

x00040000,

x01001000,

//; sp[7]

x20080008,

x00080000,

x00000200,

x20080208,

x00000008,

x20080008,

x20000000,

x00000008,

x20000200,

x00000208,

x20080208,

x00080200,

x00080208,

x20080200,

x00080000,

x20000000,

x00000208,

x20000008,

x00080008,

x20080000,

x00080200,

x20000200,

x20000208,

x00080208,

x20080000,

x00000000,

x00000000,

x20000208,

x20000008,

x00080008,

x20080200,

x00000200,

x20080200,

x00000200,

x00080208,

x00080000,

x20000000,

x20000208,

x00080000,

x20080200,

x00080008,

x20000000,

x20000008,

x00000208,

x20000208,

x00000008,

x00000200,

x20080008,

x00000000,

x20080208,

x20000200,

x20000008,

x00000208,

x00080008,

x20080008,

x00000000,

x20080208,

x00080200,

x00080200,

x20080000,

x20080000,

x20000200,

x00000008,

x00080208

};

//unsigned char en_keytbl[16*8];

//int loopcount;

//unsigned int block[2];

des_encrypt(unsigned int *bl,unsigned char* kp,unsigned int mode)

{

static unsigned char * keyptr;

static unsigned int loopcount;

static unsigned int block[2];

keyptr=kp;

block[0]=bl[0];

block[1]=bl[1];

_asm

{

cmp [mode],0

jz decrypt_block

;--------------------------------------------------------------------

; Local PERMUTE for encrypt_block & decrypt_block

;input conditions:

; esi:perm. table ptr

; edx:eax input high and low

; ebp:edi output high and low

; destroys all registers except cx!

;----------------------------------------------------------------------

; void encrypt_block(void);

; encrypts data in (unsigned char block[8] ),

; returning it in the same block[].

;;encrypt_block:esiediebp

esi, offset p1edx,dword ptr[block]eax,dword ptr[block+4]l_permute ;returns with output in ebp:edi

eax,edi ;f() input is ebp:eax

esi,[keyptr]

esi,7[loopcount],16 ;yes, this is the full 16 round DES

:

and ebx,0ffffh edx,eax ;prepare to operate on right halfecx,eax ;and save it: it becomes left halfedx ;edx has f() inputeax,eax ;output gets zeroedi,offset sp_table+7*4*64 ;point to combined s & p boxesedx,3 ;prepare for E() function

;THE F() FUNCTION (encrypt)bx,dx ;nybble 1bl,[esi] ;XOR with key bitsbx,11111100besieax, [ebx+edi] ;set bits for this nybbleedx,4 ; (E function)edi,4*64 ;sizeof(long)*sizeof(table)

bx,dx ;nybble 2bl,[esi] ;XOR with key bitsbx,11111100besieax, [ebx+edi] ;set bits for this nybbleedx,4 ; (E function)edi,4*64 ;sizeof(long)*sizeof(table)

bx,dx ;nybble 3bl,[esi] ;XOR with key bitsbx,11111100besieax, [ebx+edi] ;set bits for this nybbleedx,4 ; (E function)edi,4*64 ;sizeof(long)*sizeof(table)

bx,dx ;nybble 4bl,[esi] ;XOR with key bitsbx,11111100besieax, [ebx+edi] ;set bits for this nybbleedx,4 ; (E function)edi,4*64 ;sizeof(long)*sizeof(table)

bx,dx ;nybble 5bl,[esi] ;XOR with key bitsbx,11111100besieax, [ebx+edi] ;set bits for this nybbleedx,4 ; (E function)edi,4*64 ;sizeof(long)*sizeof(table)

bx,dx ;nybble 6bl,[esi] ;XOR with key bitsbx,11111100besieax, [ebx+edi] ;set bits for this nybbleedx,4 ; (E function)edi,4*64 ;sizeof(long)*sizeof(table)

bx,dx ;nybble 7bl,[esi] ;XOR with key bitsbx,11111100besieax, [ebx+ed