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

📄 bf.asm

📁 加密解密小工具加密解密小工具加密解密小工具
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        .if lParam!=0
            mov edx,wParam
            shr edx,16
            .if dx==BN_CLICKED
                .if ax==IDC_OK
                    invoke GetDlgItemText, hDlg, IDC_EDIT0, addr Psw, 56
    		        invoke SendMessage, hDlg, WM_CLOSE, NULL, NULL
			    .endif
			.endif
		.endif
	.else
		mov eax,FALSE
		ret
	.endif
   	mov eax,TRUE
    ret
    
DlgProc1 endp

Blowfish proc lpOutBuffer:dword, lpInBuffer:dword, lpPsw:dword, uModel:dword

    call BF_Init
    invoke lstrlen, lpInBuffer
    test eax,eax
    jz @3
    mov ecx,8
    div cl
    mov cl,al
    cmp ah,0
    jz @1
    inc ecx
@1:    
    mov esi,lpInBuffer
    mov ebx,0
@2:
    mov eax,dword ptr [esi+ebx*8]
    mov edx,dword ptr [esi+ebx*8+4]
    bswap eax
    bswap edx
    xchg eax,edx
    push ecx
    push ebx
    push esi
    .if uModel==1
        push edx
        push eax
    	call BF_Encrypt
    .elseif uModel==0
        push edx
        push eax
    	call BF_Decrypt
    .endif
    pop esi
    pop ebx
    pop ecx
    bswap eax
    bswap edx
    xchg eax,edx
    mov edi,lpOutBuffer
    mov dword ptr [edi+ebx*8],eax
    mov dword ptr [edi+ebx*8+4],edx
    inc ebx
    loop @2
    jmp @4
@3:    
    invoke MessageBox, NULL, addr szMsg1, NULL, MB_OK
@4:
    ret
    
Blowfish endp

BF_Init proc

    local dwPsw:dword
    local lpPbox:dword
    local lpK_Pbox:dword
    local dwBF_Low:dword
    local dwBF_High:dword
    
;******************************************************************
;*  Initialize K_Pbox                                             *
;******************************************************************

    mov ebx,1
    mov esi,12h
    mov lpPbox,offset Pbox
    mov lpK_Pbox,offset K_Pbox

@1:
    xor eax,eax
    mov dwPsw,eax
    mov edi,4
@2:
    mov eax,dwPsw
    shl eax,8
    mov edx,offset Psw
    movzx edx,byte ptr ds:[edx+ebx-1]
    or eax,edx
    mov dwPsw,eax
    inc ebx
    mov eax,offset Psw
    invoke lstrlen, eax
    cmp ebx,eax
    jle @3
    mov ebx,1
@3:
    dec edi
    jnz @2
    mov eax,lpPbox
    mov eax,dword ptr ds:[eax]
    xor eax,dwPsw
    mov edx,lpK_Pbox
    mov dword ptr ds:[edx],eax
    add lpK_Pbox,4
    add lpPbox,4
    dec esi
    jnz @1
    
;******************************************************************
;*  Initialize K_Sbox                                             *
;******************************************************************

    xor esi,esi
    mov edx,offset Sbox1
@4:
    xor ebx,ebx
    mov eax,edx
@5:
    mov ecx,esi
    shl ecx,8
    add ecx,ebx
    mov edi,dword ptr ds:[eax]
    mov dword ptr ds:[ecx*4+offset K_Sbox],edi
    inc ebx
    add eax,4
    cmp ebx,100h
    jnz @5
    inc esi
    add edx,400h
    cmp esi,4
    jnz @4
    
;******************************************************************
;*  Initialize Subkey                                             *   
;******************************************************************

    mov dwBF_Low,0
    mov dwBF_High,0
    mov esi,209h
    lea ebx,K_Pbox
@6:
    push esi
    push ebx
    push dwBF_High
    push dwBF_Low
    call BF_Encrypt
    pop ebx
    pop esi
    mov dwBF_Low,eax
    mov dwBF_High,edx
    mov eax,dwBF_High
    xor edx,edx
    mov dword ptr ds:[ebx],eax
    mov eax,dwBF_Low
    mov edx,dwBF_High
    mov dword ptr ds:[ebx+4],eax
    add ebx,8
    dec esi
    jnz @6
    xor eax,eax
    ret
    
BF_Init endp

;******************************************************************
;*  BF_Encrypt                                                    *   
;******************************************************************

BF_Encrypt proc BF_Low:dword, BF_High:dword

    local temp:dword
    
    mov eax,BF_High
    mov esi,eax
    mov eax,BF_Low
    mov edx,BF_High
    mov temp,eax
    mov bl,1
    mov edi,offset K_Pbox
@1:
    push ebx
    xor esi,dword ptr ds:[edi]
    mov eax,esi
    call BF_Func
    pop ebx
    xor temp,eax
    cmp bl,10h
    jnb @2
    mov eax,temp
    mov temp,esi
    mov esi,eax
@2:
    inc ebx
    add edi,4
    cmp bl,11h
    jnz @1
    mov eax,dword ptr ds:[K_Pbox+16*4]
    xor temp,eax
    xor esi,dword ptr ds:[K_Pbox+17*4]
    mov eax,temp
    mov edx,esi
    ret
    
BF_Encrypt endp
    
;******************************************************************
;*  BF_Decrypt                                                    *   
;******************************************************************

BF_Decrypt proc BF_Low:dword, BF_High:dword
 
    local temp:dword
    
    mov eax,BF_High
    mov esi,eax
    mov eax,BF_Low
    mov edx,BF_High
    mov temp,eax
    mov eax,dword ptr ds:[K_Pbox+16*4]
    xor temp,eax
    xor esi,dword ptr ds:[K_Pbox+17*4]
    mov bl,10h
    mov edi,offset K_Pbox+15*4
@1:
    cmp bl,10h
    jnb @2
    mov eax,temp
    mov temp,esi
    mov esi,eax
@2:
    push ebx
    mov eax,esi
    call BF_Func
    pop ebx
    xor temp,eax
    xor esi,dword ptr ds:[edi]
    dec ebx
    sub edi,4
    test bl,bl
    jnz @1
    mov edx,esi
    mov eax,temp
    ret
    
BF_Decrypt endp

;******************************************************************
;*  BF_Function                                                   *   
;******************************************************************

BF_Func proc
    
    local temp:dword
    
    mov ebx,eax
    and ebx,0FF000000h
    shr ebx,18h
    mov edx,eax
    and edx,0FF0000h
    shr edx,10h
    mov byte ptr temp,dl
    mov edx,eax
    and edx,0FF00h
    shr edx,8
    mov byte ptr temp+1,dl
    and al,0FFh
    mov byte ptr temp+2,al
    xor eax,eax
    mov al,bl
    mov eax,dword ptr ds:[eax*4+offset K_Sbox]			;K_Sbox1
    xor edx,edx
    mov dl,byte ptr temp
    add eax,dword ptr ds:[edx*4+offset K_Sbox+400h]		;K_Sbox2
    xor edx,edx
    push edx
    push eax
    xor eax,eax
    mov al,byte ptr temp+1
    mov eax,dword ptr ds:[eax*4+offset K_Sbox+800h]		;K_Sbox3
    xor edx,edx
    xor eax,dword ptr ss:[esp]
    xor edx,dword ptr ss:[esp+4]
    add esp,8
    push edx
    push eax
    xor eax,eax
    mov al,byte ptr temp+2
    mov eax,dword ptr ds:[eax*4+offset K_Sbox+0c00h]	;K_Sbox4
    xor edx,edx
    add eax,dword ptr ss:[esp]
    adc edx,dword ptr ss:[esp+4]
    add esp,8
    ret

BF_Func endp

end start
    

⌨️ 快捷键说明

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