⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.asm

📁 ASM 多种hash模块,汇编源码 MD2,4,5 SHA 等多种加密算法 还有其他赠送内容
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;
; DES masm source, written by drizz
;
.686
.XMM
.MODEL FLAT,STDCALL

DESSetKey PROTO pKey:PTR BYTE
DESSetKeyEnc PROTO pKey:PTR BYTE
DESSetKeyDec PROTO pKey:PTR BYTE
DESEncrypt PROTO pBlockIn:PTR BYTE,pBlockOut:PTR BYTE
DESDecrypt PROTO pBlockIn:PTR BYTE,pBlockOut:PTR BYTE

comment %

Usage example

	.data
		align 8
		key       db 043h, 029h, 07fh, 0adh, 038h, 0e3h, 073h, 0feh
		Plaintext db 076h, 025h, 014h, 0b8h, 029h, 0bfh, 048h, 06ah
		Ciphertext db 0eah, 067h, 06bh, 02ch, 0b7h, 0dbh, 02bh, 07ah
	.code
		invoke DESSetKeyEnc,offset key
		invoke DESEncrypt,offset Plaintext,offset Plaintext
		invoke DESSetKeyDec,offset key
		invoke DESDecrypt,offset Plaintext,offset Plaintext
%

.data
	align 16
Spbox label dword;[8][64]
dd 001010400h,000000000h,000010000h,001010404h,001010004h,000010404h,000000004h,000010000h
dd 000000400h,001010400h,001010404h,000000400h,001000404h,001010004h,001000000h,000000004h
dd 000000404h,001000400h,001000400h,000010400h,000010400h,001010000h,001010000h,001000404h
dd 000010004h,001000004h,001000004h,000010004h,000000000h,000000404h,000010404h,001000000h
dd 000010000h,001010404h,000000004h,001010000h,001010400h,001000000h,001000000h,000000400h
dd 001010004h,000010000h,000010400h,001000004h,000000400h,000000004h,001000404h,000010404h
dd 001010404h,000010004h,001010000h,001000404h,001000004h,000000404h,000010404h,001010400h
dd 000000404h,001000400h,001000400h,000000000h,000010004h,000010400h,000000000h,001010004h

dd 080108020h,080008000h,000008000h,000108020h,000100000h,000000020h,080100020h,080008020h
dd 080000020h,080108020h,080108000h,080000000h,080008000h,000100000h,000000020h,080100020h
dd 000108000h,000100020h,080008020h,000000000h,080000000h,000008000h,000108020h,080100000h
dd 000100020h,080000020h,000000000h,000108000h,000008020h,080108000h,080100000h,000008020h
dd 000000000h,000108020h,080100020h,000100000h,080008020h,080100000h,080108000h,000008000h
dd 080100000h,080008000h,000000020h,080108020h,000108020h,000000020h,000008000h,080000000h
dd 000008020h,080108000h,000100000h,080000020h,000100020h,080008020h,080000020h,000100020h
dd 000108000h,000000000h,080008000h,000008020h,080000000h,080100020h,080108020h,000108000h

dd 000000208h,008020200h,000000000h,008020008h,008000200h,000000000h,000020208h,008000200h
dd 000020008h,008000008h,008000008h,000020000h,008020208h,000020008h,008020000h,000000208h
dd 008000000h,000000008h,008020200h,000000200h,000020200h,008020000h,008020008h,000020208h
dd 008000208h,000020200h,000020000h,008000208h,000000008h,008020208h,000000200h,008000000h
dd 008020200h,008000000h,000020008h,000000208h,000020000h,008020200h,008000200h,000000000h
dd 000000200h,000020008h,008020208h,008000200h,008000008h,000000200h,000000000h,008020008h
dd 008000208h,000020000h,008000000h,008020208h,000000008h,000020208h,000020200h,008000008h
dd 008020000h,008000208h,000000208h,008020000h,000020208h,000000008h,008020008h,000020200h

dd 000802001h,000002081h,000002081h,000000080h,000802080h,000800081h,000800001h,000002001h
dd 000000000h,000802000h,000802000h,000802081h,000000081h,000000000h,000800080h,000800001h
dd 000000001h,000002000h,000800000h,000802001h,000000080h,000800000h,000002001h,000002080h
dd 000800081h,000000001h,000002080h,000800080h,000002000h,000802080h,000802081h,000000081h
dd 000800080h,000800001h,000802000h,000802081h,000000081h,000000000h,000000000h,000802000h
dd 000002080h,000800080h,000800081h,000000001h,000802001h,000002081h,000002081h,000000080h
dd 000802081h,000000081h,000000001h,000002000h,000800001h,000002001h,000802080h,000800081h
dd 000002001h,000002080h,000800000h,000802001h,000000080h,000800000h,000002000h,000802080h

dd 000000100h,002080100h,002080000h,042000100h,000080000h,000000100h,040000000h,002080000h
dd 040080100h,000080000h,002000100h,040080100h,042000100h,042080000h,000080100h,040000000h
dd 002000000h,040080000h,040080000h,000000000h,040000100h,042080100h,042080100h,002000100h
dd 042080000h,040000100h,000000000h,042000000h,002080100h,002000000h,042000000h,000080100h
dd 000080000h,042000100h,000000100h,002000000h,040000000h,002080000h,042000100h,040080100h
dd 002000100h,040000000h,042080000h,002080100h,040080100h,000000100h,002000000h,042080000h
dd 042080100h,000080100h,042000000h,042080100h,002080000h,000000000h,040080000h,042000000h
dd 000080100h,002000100h,040000100h,000080000h,000000000h,040080000h,002080100h,040000100h

dd 020000010h,020400000h,000004000h,020404010h,020400000h,000000010h,020404010h,000400000h
dd 020004000h,000404010h,000400000h,020000010h,000400010h,020004000h,020000000h,000004010h
dd 000000000h,000400010h,020004010h,000004000h,000404000h,020004010h,000000010h,020400010h
dd 020400010h,000000000h,000404010h,020404000h,000004010h,000404000h,020404000h,020000000h
dd 020004000h,000000010h,020400010h,000404000h,020404010h,000400000h,000004010h,020000010h
dd 000400000h,020004000h,020000000h,000004010h,020000010h,020404010h,000404000h,020400000h
dd 000404010h,020404000h,000000000h,020400010h,000000010h,000004000h,020400000h,000404010h
dd 000004000h,000400010h,020004010h,000000000h,020404000h,020000000h,000400010h,020004010h

dd 000200000h,004200002h,004000802h,000000000h,000000800h,004000802h,000200802h,004200800h
dd 004200802h,000200000h,000000000h,004000002h,000000002h,004000000h,004200002h,000000802h
dd 004000800h,000200802h,000200002h,004000800h,004000002h,004200000h,004200800h,000200002h
dd 004200000h,000000800h,000000802h,004200802h,000200800h,000000002h,004000000h,000200800h
dd 004000000h,000200800h,000200000h,004000802h,004000802h,004200002h,004200002h,000000002h
dd 000200002h,004000000h,004000800h,000200000h,004200800h,000000802h,000200802h,004200800h
dd 000000802h,004000002h,004200802h,004200000h,000200800h,000000000h,000000002h,004200802h
dd 000000000h,000200802h,004200000h,000000800h,004000002h,004000800h,000000800h,000200002h

dd 010001040h,000001000h,000040000h,010041040h,010000000h,010001040h,000000040h,010000000h
dd 000040040h,010040000h,010041040h,000041000h,010041000h,000041040h,000001000h,000000040h
dd 010040000h,010000040h,010001000h,000001040h,000041000h,000040040h,010040040h,010041000h
dd 000001040h,000000000h,000000000h,010040040h,010000040h,010001000h,000041040h,000040000h
dd 000041040h,000040000h,010041000h,000001000h,000000040h,010040040h,000001000h,000041040h
dd 010001000h,000000040h,010000040h,010040000h,010040040h,010000000h,000040000h,010001040h
dd 000000000h,010041040h,000040040h,010000040h,010040000h,010001000h,010001040h,000000000h
dd 010041040h,000041000h,000041000h,000001040h,000001040h,000040040h,010000000h,010041000h

.data?
	align 16
KeyTab dd (16*8)/4 dup(?)

.code

	align 16
DESSetKeyEnc proc pKey:PTR BYTE
	lea eax,KeyTab
	xi = 0
	rept 8
		%pxor mm&@CatStr(%xi),mm&@CatStr(%xi)
		;xi = xi + 1
		xi = (xi + 1) and 7
	endm
	;xi = 0
	rept 8
		%movq [eax+xi*8],mm&@CatStr(%xi)
		xi = xi + 1
	endm
	rept 8
		%movq [eax+xi*8],mm&@CatStr(%(xi-8))
		xi = xi + 1
	endm
	invoke DESSetKey,pKey
	ret
DESSetKeyEnc endp

align 16
DESSetKeyDec proc pKey:PTR BYTE
	invoke DESSetKey,pKey 
;	reverse key schedule order
	lea eax,KeyTab
	comment #
	xi = 0
	for yi,<00,01,02,03,15,14,13,12>
		%movq mm&@CatStr(%xi),[eax+yi*8]
		xi = (xi + 1) and 7
	endm
	for yi,<15,14,13,12,00,01,02,03>
		%movq [eax+yi*8],mm&@CatStr(%xi)
		xi = (xi + 1) and 7
	endm
	for yi,<04,05,06,07,11,10,09,08>
		%movq mm&@CatStr(%xi),[eax+yi*8]
		xi = (xi + 1) and 7
	endm
	for yi,<11,10,09,08,04,05,06,07>
		%movq [eax+yi*8],mm&@CatStr(%xi)
		xi = (xi + 1) and 7
	endm
	#
	movq mm0,[eax+0*8]
	movq mm1,[eax+1*8]
	movq mm2,[eax+2*8]
	movq mm3,[eax+3*8]
	movq mm4,[eax+15*8]
	movq mm5,[eax+14*8]
	movq mm6,[eax+13*8]
	movq mm7,[eax+12*8]
	movq [eax+15*8],mm0
	movq [eax+14*8],mm1
	movq [eax+13*8],mm2
	movq [eax+12*8],mm3
	movq [eax+0*8],mm4
	movq [eax+1*8],mm5
	movq [eax+2*8],mm6
	movq [eax+3*8],mm7
	movq mm0,[eax+4*8]
	movq mm1,[eax+5*8]
	movq mm2,[eax+6*8]
	movq mm3,[eax+7*8]
	movq mm4,[eax+11*8]
	movq mm5,[eax+10*8]
	movq mm6,[eax+9*8]
	movq mm7,[eax+8*8]
	movq [eax+11*8],mm0
	movq [eax+10*8],mm1
	movq [eax+9*8],mm2
	movq [eax+8*8],mm3
	movq [eax+4*8],mm4
	movq [eax+5*8],mm5
	movq [eax+6*8],mm6
	movq [eax+7*8],mm7
	ret
DESSetKeyDec endp

ROTL macro X,N
	if N le 16
	rol X,(N)
	else
	ror X,32-(N)
	endif
endm

ROTR macro X,N
	if N le 16
	ror X,(N)
	else
	rol X,32-(N)
	endif
endm

IPERM1 macro ww,ll,rr,cc,cc2
	mov ww,ll
	xor ww,rr
	and ww,cc
	xor ll,ww
	xor rr,ww
	ROTR rr,cc2
endm

FPERM1 macro ww,ll,rr,cc,cc2
	mov ww,ll
	xor ww,rr
	and ww,cc
	xor ll,ww
	xor rr,ww
	ROTR ll,cc2
endm
	
IPERM macro left,right
	local work
	work textequ <ecx>
	rol right,4
	IPERM1 work,left,right,11110000111100001111000011110000b,20
	IPERM1 work,left,right,11111111111111110000000000000000b,18
	IPERM1 work,left,right,00110011001100110011001100110011b,6
	IPERM1 work,left,right,00000000111111110000000011111111b,32-9
	FPERM1 work,left,right,10101010101010101010101010101010b,32-1
endm
	
FPERM macro left,right
	local work;
	work textequ <ecx>
	ror right,1;
	FPERM1 work,left,right,10101010101010101010101010101010b,9
	FPERM1 work,left,right,00000000111111110000000011111111b,32-6
	FPERM1 work,left,right,00110011001100110011001100110011b,32-18
	FPERM1 work,left,right,11111111111111110000000000000000b,32-20
	FPERM1 work,left,right,11110000111100001111000011110000b,4
endm

	align 16
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
DESDecrypt proc pBlockIn:PTR BYTE,pBlockOut:PTR BYTE
DESDecrypt endp
DESEncrypt proc pBlockIn:PTR BYTE,pBlockOut:PTR BYTE
	mov ecx,[esp][1*4];pBlockIn
	push ebp
	push esi
	push edi
	push ebx
	l equ <eax>
	r equ <edx>
	mov l,[ecx][0]
	mov r,[ecx][4]
	bswap l
	bswap r
	IPERM l,r
	xi = 0
	repeat 8
		mov ebx,r
		ror ebx,4
		xor ebx,[KeyTab+xi*4*4+0*4]
		and ebx,00111111001111110011111100111111b  
		movzx edi,bl
		movzx esi,bh
		shr ebx,16
		movzx ecx,bl
		movzx ebx,bh
		xor l,Spbox[6*64*4][edi*4]
		xor l,Spbox[4*64*4][esi*4]
		xor l,Spbox[2*64*4][ecx*4]
		xor l,Spbox[0*64*4][ebx*4]
		mov ebx,r
		xor ebx,[KeyTab+xi*4*4+1*4]
		and ebx,00111111001111110011111100111111b
		movzx edi,bl
		movzx esi,bh
		shr ebx,16
		movzx ecx,bl
		movzx ebx,bh
		xor l,Spbox[7*64*4][edi*4]
		xor l,Spbox[5*64*4][esi*4]
		xor l,Spbox[3*64*4][ecx*4]
		xor l,Spbox[1*64*4][ebx*4]
		mov ebx,l
		ror ebx,4
		xor ebx,[KeyTab+xi*4*4+2*4]
		and ebx,00111111001111110011111100111111b
		movzx edi,bl
		movzx esi,bh
		shr ebx,16
		movzx ecx,bl
		movzx ebx,bh
		xor r,Spbox[6*64*4][edi*4]
		xor r,Spbox[4*64*4][esi*4]
		xor r,Spbox[2*64*4][ecx*4]
		xor r,Spbox[0*64*4][ebx*4]
		mov ebx,l
		xor ebx,[KeyTab+xi*4*4+3*4]
		and ebx,00111111001111110011111100111111b
		movzx edi,bl
		movzx esi,bh
		shr ebx,16
		movzx ecx,bl
		movzx ebx,bh
		xor r,Spbox[7*64*4][edi*4]
		xor r,Spbox[5*64*4][esi*4]
		xor r,Spbox[3*64*4][ecx*4]
		xor r,Spbox[1*64*4][ebx*4]
		xi = xi + 1
	endm
	FPERM l,r
	mov ecx,[esp][2*4][4*4];pBlockOut
	bswap l
	bswap r
	mov [ecx][0],r
	mov [ecx][4],l
	pop ebx
	pop edi
	pop esi
	pop ebp
	ret 1*4
DESEncrypt endp

	align 16
DESSetKey proc pKey:PTR BYTE
	mov eax,[esp][1*4]
	mov ecx,[eax][0]
	mov edx,[eax][4]
	bswap ecx
	bswap edx
	push ebp
	push esi
	push edi
	push ebx
	lea edi,KeyTab
	test edx,000000002h
	jz @F
	mov eax,000000004h
	mov ebx,000000100h
	mov esi,000000001h
	mov ebp,000000800h
	or [edi][0*8][0],eax
	or [edi][1*8][0],ebx
	or [edi][2*8][0],esi
	or [edi][3*8][4],ebp
	mov eax,000000010h
	mov ebx,000000200h
	mov esi,000000400h
	mov ebp,000000010h
	or [edi][4*8][0],eax
	or [edi][5*8][0],ebx
	or [edi][6*8][4],esi
	or [edi][8*8][4],ebp
	mov eax,000001000h
	mov ebx,000000004h
	mov esi,000000002h
	mov ebp,000000001h
	or [edi][9*8][4],eax
	or [edi][11*8][4],ebx
	or [edi][12*8][0],esi
	or [edi][13*8][4],ebp
	mov eax,000002000h
	mov ebx,000000002h
	or [edi][14*8][4],eax
	or [edi][15*8][4],ebx
@@:
	test edx,000000004h
	jz @F
	mov eax,000000004h
	mov ebx,000000200h
	mov esi,000000800h
	mov ebp,000000002h
	or [edi][0*8][4],eax
	or [edi][2*8][4],ebx
	or [edi][3*8][0],esi
	or [edi][4*8][4],ebp
	mov eax,000000100h
	mov ebx,000000001h
	mov esi,000000800h
	mov ebp,000000008h
	or [edi][5*8][0],eax
	or [edi][6*8][0],ebx
	or [edi][7*8][4],esi
	or [edi][8*8][4],ebp
	mov eax,000000100h
	mov ebx,000000020h
	mov esi,000000020h
	mov ebp,000000010h
	or [edi][9*8][4],eax
	or [edi][10*8][4],ebx
	or [edi][11*8][0],esi
	or [edi][12*8][4],ebp
	mov eax,000001000h
	mov ebx,000000400h
	or [edi][13*8][4],eax
	or [edi][15*8][0],ebx
@@:
	test edx,000000008h
	jz @F
	mov eax,000000020h
	mov ebx,000002000h
	mov esi,000000008h
	mov ebp,000000400h
	or [edi][0*8][0],eax
	or [edi][2*8][0],ebx
	or [edi][3*8][0],esi
	or [edi][4*8][0],ebp
	mov eax,000000200h
	mov ebx,000000800h
	mov esi,000002000h
	mov ebp,000000004h
	or [edi][6*8][4],eax
	or [edi][7*8][0],ebx
	or [edi][8*8][4],esi
	or [edi][9*8][0],ebp
	mov eax,000001000h
	mov ebx,000000008h
	mov esi,000000100h
	mov ebp,000000020h
	or [edi][11*8][0],eax
	or [edi][12*8][4],ebx
	or [edi][13*8][4],esi
	or [edi][14*8][4],ebp
	mov eax,000000400h
	or [edi][15*8][4],eax
@@:
	test edx,000000010h
	jz @F
	mov eax,004000000h
	mov ebx,000200000h
	mov esi,002000000h
	mov ebp,000100000h
	or [edi][0*8][0],eax
	or [edi][1*8][0],ebx
	or [edi][2*8][4],esi
	or [edi][3*8][0],ebp
	mov eax,010000000h
	mov ebx,008000000h
	mov esi,000020000h
	mov ebp,008000000h
	or [edi][4*8][0],eax
	or [edi][5*8][4],ebx
	or [edi][6*8][4],esi
	or [edi][7*8][0],ebp
	mov eax,001000000h
	mov ebx,000010000h
	mov esi,004000000h
	mov ebp,000040000h
	or [edi][8*8][4],eax
	or [edi][9*8][0],ebx
	or [edi][10*8][4],esi
	or [edi][11*8][0],ebp
	mov eax,000010000h
	mov ebx,010000000h
	mov esi,000020000h
	or [edi][12*8][4],eax
	or [edi][13*8][4],ebx
	or [edi][14*8][0],esi
@@:
	test edx,000000020h
	jz @F
	mov eax,000200000h
	mov ebx,008000000h
	mov esi,000020000h
	mov ebp,008000000h
	or [edi][0*8][4],eax
	or [edi][1*8][4],ebx
	or [edi][2*8][4],esi
	or [edi][3*8][0],ebp
	mov eax,000100000h
	mov ebx,001000000h
	mov esi,020000000h
	mov ebp,000010000h
	or [edi][5*8][4],eax
	or [edi][6*8][0],ebx
	or [edi][7*8][4],esi
	or [edi][8*8][4],ebp
	mov eax,010000000h
	mov ebx,000020000h
	mov esi,004000000h
	mov ebp,000040000h
	or [edi][9*8][4],eax
	or [edi][10*8][0],ebx
	or [edi][11*8][0],esi
	or [edi][13*8][4],ebp
	mov eax,010000000h
	or [edi][15*8][0],eax
@@:
	test edx,000000040h
	jz @F
	mov eax,000010000h
	mov ebx,000100000h
	mov esi,001000000h
	mov ebp,020000000h
	or [edi][0*8][0],eax
	or [edi][1*8][4],ebx
	or [edi][2*8][0],esi
	or [edi][3*8][4],ebp
	mov eax,002000000h
	mov ebx,000080000h
	mov esi,000200000h
	mov ebp,000040000h
	or [edi][4*8][0],eax
	or [edi][5*8][4],ebx
	or [edi][7*8][0],esi
	or [edi][9*8][4],ebp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -