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

📄 testbase64.asm

📁 WIN 32 汇编编写的BASE64 的编码和解码
💻 ASM
字号:
;***********************************************
;程序名称:演示Base64编码/解码原理
;作者:罗聪
;日期:2002-9-14
;出处:http://laoluoc.yeah.net(老罗的缤纷天地)
;注意事项:如欲转载,请保持本程序的完整,并注明:
;转载自“老罗的缤纷天地”(http://laoluoc.yeah.net)
;***********************************************

.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include Base64Dll.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib Base64Dll.lib

WndProc            proto :DWORD, :DWORD, :DWORD, :DWORD

.const
IDC_BUTTON_ENCODE    equ    3000
IDC_BUTTON_DECODE    equ    3001
IDC_EDIT_INPUT       equ    3002
MAXSIZE              equ    260

.data
szDlgName            db    "lc_dialog", 0
szCaption            db    "BASE64 demo by LC", 0
szBuffer             db    255 dup(0)
szText               db    340 dup(0)
szMsg                db    450 dup(0)
szTemplate_Encode    db    "字符串 ""%s"" 的Base64编码是:", 13, 10, 13, 10, "%s", 0
szTemplate_Decode    db    "编码 ""%s"" 经过Base64还原后的字符串是:", 13, 10, 13, 10, "%s", 0

.code
main:
    invoke GetModuleHandle, NULL
    invoke DialogBoxParam, eax, offset szDlgName, 0, WndProc, 0
    invoke ExitProcess, eax

WndProc proc uses edi hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    LOCAL hEdit: HWND

    .if uMsg == WM_CLOSE
        invoke EndDialog, hWnd, 0
        
    .elseif uMsg == WM_COMMAND
        mov eax, wParam
        mov edx, eax
        shr edx, 16
        movzx eax, ax
        .if edx == BN_CLICKED
            .if eax == IDCANCEL
                invoke EndDialog, hWnd, NULL
    
            .elseif eax == IDC_BUTTON_ENCODE || eax == IDOK
                ;取得用户输入的字符串:
                invoke GetDlgItemText, hWnd, IDC_EDIT_INPUT, addr szBuffer, 255

                ;进行 ASCII->Base64 转换:
                invoke Base64Encode, addr szBuffer, addr szText

                ;格式化输出:
                invoke wsprintf, addr szMsg, addr szTemplate_Encode, addr szBuffer, addr szText

                ;显示结果:
                invoke MessageBox, hWnd, addr szMsg, addr szCaption, MB_OK

            .elseif eax == IDC_BUTTON_DECODE
                ;取得用户输入的字符串:
                invoke GetDlgItemText, hWnd, IDC_EDIT_INPUT, addr szBuffer, 255

                ;进行 Base64->ASCII 转换:
                invoke Base64Decode, addr szBuffer, addr szText

                ;格式化输出:
                invoke wsprintf, addr szMsg, addr szTemplate_Decode, addr szBuffer, addr szText

                ;显示结果:
                invoke MessageBox, hWnd, addr szMsg, addr szCaption, MB_OK
            .endif

            ;全选edit里面的内容:
            invoke GetDlgItem, hWnd, IDC_EDIT_INPUT
            invoke SendMessage, eax, EM_SETSEL, 0, -1

        .endif
    .else
        mov eax, FALSE
        ret
    .endif
    mov eax, TRUE
    ret
WndProc endp

end main
;********************    over    ********************
;by LC

⌨️ 快捷键说明

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