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

📄 rc6.inc

📁 RC(2),RC(4),RC(5),RC(6)算法.我的珍藏软件,毕业设计时候编写的.现在和大家一起分享.希望能帮助大家.
💻 INC
字号:
comment	*

Algorithm		:  RC6 by Ron Rivest and RSA Labs ( Block Cipher )
Block		:  16 bytes
Round		:  20
KeySize		:  128/192/256 bits

Usage:

invoke		rc6_setkey,addr ptrIndata,ptrIndata_length	( setkey )
	
		128 bits : invoke rc6_setkey,addr ptrIndata,16
		192 bits : invoke rc6_setkey,addr ptrIndata,24
		256 bits : invoke rc6_setkey,addr ptrIndata,32
		
invoke		rc6_encrypt,addr ptrIndata,addr ptrOutdata	( 16bytes : encrypt )	
invoke		rc6_decrypt,addr ptrIndata,addr ptrOutdata	( 16bytes : decrypt )

coded by x3chun	(2004.05.04)
		( x3chun@korea.com or x3chun@hanyang.ac.kr ) ( http://x3chun.wo.to )

comment	*

rc6_setkey	proto	:DWORD,:DWORD
rc6_encrypt	proto	:DWORD,:DWORD
rc6_decrypt	proto	:DWORD,:DWORD

f_rnd		macro	i,a,b,c,d

		mov	ecx,d
		lea	eax,[d+d+1]
		imul	ecx,eax
		rol	ecx,5	; u
		mov	eax,b
		lea	ebp,[b+b+1]
		imul	eax,ebp
		rol	eax,5	; t
		xor	a,eax
		rol	a,cl
		add	a,l_key[i*4]
		xor	c,ecx
		mov	ecx,eax
		rol	c,cl
		add	c,l_key[i*4+4]
		
endm

i_rnd		macro	i,a,b,c,d

		mov	ecx,d
		lea	eax,[d+d+1]
		imul	ecx,eax
		rol	ecx,5	; u
		mov	eax,b
		lea	ebp,[b+b+1]
		imul	eax,ebp
		rol	eax,5	; t
		sub	a,l_key[i*4]
		ror	a,cl
		xor	a,eax
		mov	ebp,ecx
		mov	ecx,eax
		sub	c,l_key[i*4+4]
		ror	c,cl
		xor	c,ebp
	
endm

.const

_looprc6		equ	132

.data?

l_key		dd 	44	dup(?)
l		dd	32	dup(?)
_round		dd	?

.code

rc6_setkey	proc	ptrInkey:DWORD,ptrInkeylen:DWORD

		pushad
		lea	edi,l_key+4
		mov	dword ptr [edi-4],0b7e15163h
		mov	ecx,43
@_r1:
		mov	eax,[edi-4]
		sub	eax,61C88647h
		stosd
		loop	@_r1
		
		mov	eax,ptrInkeylen
		shr	eax,2
		mov	ecx,eax
		dec	eax
		mov	_round,eax
		
		mov	esi,ptrInkey
		mov	edi,offset l
		rep	movsd
		
		xor	eax,eax	;a
		xor	ecx,ecx	;b
		xor	edx,edx	; i
		xor	ebx,ebx	; j
		mov	edi,_looprc6		
		mov	esi,offset l
@loop:
		mov	ebp,[edx*4+l_key]
		add	ebp,eax
		add	ebp,ecx
		rol	ebp,3
		mov	eax,ebp
		mov	[edx*4+l_key],eax
		add	ecx,eax
		mov	ebp,[ebx*4+esi]
		add	ebp,ecx
		rol	ebp,cl
		mov	ecx,ebp
		mov	[ebx*4+esi],ecx
		cmp	edx,43
		jnz	@_r2
		xor	edx,edx
		jmp	@@_r2
@_r2:		
		inc	edx
@@_r2:
		cmp	ebx,_round
		jnz	@_r3
		xor	ebx,ebx
		jmp	@@_r3
@_r3:
		inc	ebx
@@_r3:
		dec	edi
		jnz	@loop		
		popad
		ret
		
rc6_setkey	endp

rc6_encrypt	proc	ptrInkey:DWORD,	ptrOutkey:DWORD

		pushad
		mov	esi,[esp+28h]	; ptrInkey
		mov	ebx,[esi+4]	; b
		add	ebx,[l_key]
		mov	edi,[esi+8]	;c
		mov	edx,[esi+12]	;d
		add	edx,[l_key+4]
		mov	esi,[esi]	; a
		
		f_rnd	 2,esi,ebx,edi,edx
		f_rnd        4,ebx,edi,edx,esi
	 	f_rnd        6,edi,edx,esi,ebx
	        	f_rnd        8,edx,esi,ebx,edi
	        	f_rnd       10,esi,ebx,edi,edx
	        	f_rnd       12,ebx,edi,edx,esi
	        	f_rnd       14,edi,edx,esi,ebx
	        	f_rnd       16,edx,esi,ebx,edi
	        	f_rnd 	18,esi,ebx,edi,edx  
	        	f_rnd	20,ebx,edi,edx,esi 
   		f_rnd 	22,edi,edx,esi,ebx 
   		f_rnd 	24,edx,esi,ebx,edi 
 		f_rnd 	26,esi,ebx,edi,edx  
 		f_rnd 	28,ebx,edi,edx,esi 
   		f_rnd 	30,edi,edx,esi,ebx  
   		f_rnd 	32,edx,esi,ebx,edi 
   		f_rnd 	34,esi,ebx,edi,edx  
   		f_rnd 	36,ebx,edi,edx,esi 
   		f_rnd 	38,edi,edx,esi,ebx  
   		f_rnd 	40,edx,esi,ebx,edi 
   		
   		add	esi,[l_key+4*42]
   		add	edi,[l_key+4*43]
  	
   		mov	ecx,[esp+2ch]	; ptrOutkey
   		mov	[ecx],esi
   		mov	[ecx+4],ebx
   		mov	[ecx+8],edi
   		mov	[ecx+12],edx	
   		popad	
		ret
		
rc6_encrypt	endp

rc6_decrypt	proc	ptrInKey:DWORD,	ptrOutkey:DWORD

		pushad
		mov	esi,[esp+28h]
		mov	edx,[esi+12]	;d
		mov	edi,[esi+8]	;c
		sub	edi,[l_key+4*43]
		mov	ebx,[esi+4]	;b
		mov	esi,[esi]	;a
		sub	esi,[l_key+4*42]
		
		i_rnd	40,edx,esi,ebx,edi
		i_rnd	38,edi,edx,esi,ebx
		i_rnd 	36,ebx,edi,edx,esi  
		i_rnd 	34,esi,ebx,edi,edx 
  		i_rnd 	32,edx,esi,ebx,edi  
  		i_rnd 	30,edi,edx,esi,ebx 
   		i_rnd 	28,ebx,edi,edx,esi  
   		i_rnd 	26,esi,ebx,edi,edx 
   		i_rnd 	24,edx,esi,ebx,edi  
   		i_rnd 	22,edi,edx,esi,ebx 
   		i_rnd 	20,ebx,edi,edx,esi  
   		i_rnd 	18,esi,ebx,edi,edx 
   		i_rnd 	16,edx,esi,ebx,edi  
   		i_rnd 	14,edi,edx,esi,ebx 
   		i_rnd 	12,ebx,edi,edx,esi  
   		i_rnd 	10,esi,ebx,edi,edx 
   		i_rnd  	8,edx,esi,ebx,edi  
   		i_rnd  	6,edi,edx,esi,ebx 
   		i_rnd  	4,ebx,edi,edx,esi  
   		i_rnd  	2,esi,ebx,edi,edx 
   		
   		sub	edx,[l_key+4]
   		sub	ebx,[l_key]
   		
   		mov	ecx,[esp+2ch]	; ptrOutkey
   		mov	[ecx],esi
   		mov	[ecx+4],ebx
   		mov	[ecx+8],edi
   		mov	[ecx+12],edx
		popad
		ret
		
rc6_decrypt	endp



⌨️ 快捷键说明

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