| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2945 人关注过本帖
标题:用win32汇编实现base64编码函数
取消只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏
 问题点数:0 回复次数:1 
用win32汇编实现base64编码函数
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 https://www.bccn.net
*/ 作者: zklhp   E-mail:zklhp@  QQ:493165744
*/ 时间: 2008-8-9  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


偶想写个发电子邮件的程序 要用到base64算法 就参考网上的资料写了个base64的编码函数 还望各位高手指点

资料是网上找的  在此向前辈的无私奉献精神表示感谢

把算法帖一下吧

;**************************************************************************************************
;进行base64编码的函数
;参数:_lpszInput 指向输入缓冲区  _lpszOtput 指向输出缓冲区  _dwInputLen 想要加密的长度
;返回值:成功返回0  失败返回 -1
;作者:zklhp  Email:zklhp@
;时间:2008.8.9
;版权所有    转载请保持完整
;**************************************************************************************************

_base64 proc uses ebx esi edi _lpszInput:DWORD,_dwInputLen:DWORD,_lpszOtput:DWORD

;错误处理
    .if (_lpszInput==NULL)||(_lpszOtput==NULL)||(_dwInputLen==0)
        xor eax,eax
        dec eax
        ret
    .endif

    mov eax,_dwInputLen
    xor edx,edx
    mov ecx,3
    div ecx
    push eax
    
    .if eax > 0
        dec eax
        .if eax > 0
            push eax

            push ebp
            mov esi,_lpszInput
            mov edi,_lpszOtput
            mov ebp,eax
            lea edi,[edi+ebp*4]
            neg ebp

            align 4
        @@:

            mov ebx,DWORD ptr [esi]
            bswap ebx
            mov ecx,ebx
            mov edx,ebx
            mov eax,ebx
            shr ecx,14
            shr edx,8
            shr eax,26
            and ecx,3Fh
            shr ebx,20
            and edx,3Fh
            and eax,3Fh
            movzx ecx, BYTE PTR [base64_alphabet+ecx]
            and ebx,3Fh
            mov ch , BYTE PTR [base64_alphabet+edx]
            movzx eax, BYTE PTR [base64_alphabet+eax]
            shl ecx,16
            mov ah,BYTE PTR [base64_alphabet+ebx]
               
            add esi,3
            or ecx,eax
            mov [edi+ebp*4],ecx

            add ebp,1
            jnz @B
            pop ebp

            pop eax
            mov ecx,eax
            mov ebx,3
            mul ebx
            add _lpszInput,eax
            shl ecx,2
            add _lpszOtput,ecx
        .endif

        mov esi,_lpszInput
        mov edi,_lpszOtput
        mov ebx,DWORD ptr [esi]
        bswap ebx
        mov ecx,ebx
        mov edx,ebx
        mov eax,ebx
        shr ecx,14
        shr edx,8
        shr eax,26
        and ecx,3Fh
        shr ebx,20
        and edx,3Fh
        and eax,3Fh
        movzx ecx, BYTE PTR [base64_alphabet+ecx]
        and ebx,3Fh
        mov ch , BYTE PTR [base64_alphabet+edx]
        movzx eax, BYTE PTR [base64_alphabet+eax]
        shl ecx,16
        mov ah,BYTE PTR [base64_alphabet+ebx]         
        or ecx,eax
        mov [edi],ecx
        add _lpszInput,3
        add _lpszOtput,4
    .endif
    pop eax
    mov ecx,3
    mul ecx
    neg eax
    add eax,_dwInputLen
    ;int 3h
    .if eax == 1
        mov esi,_lpszInput
        mov edi,_lpszOtput
        movzx ecx,BYTE ptr [esi]
        mov ebx,ecx
        mov edx,ecx
        shr ecx,2
        movzx ecx,BYTE ptr [base64_alphabet+ecx]
        shl edx,4
        and edx,03fh
        movzx edx,[base64_alphabet+edx]
        shl edx,8
        or ecx,edx
        xor ebx,ebx
        mov bl,'='
        mov bh,'='
        shl ebx,16
        or ecx,ebx
        mov [edi],ecx
    .elseif eax == 2
        push eax
        mov esi,_lpszInput
        mov edi,_lpszOtput
        movzx ecx,BYTE ptr [esi]
        shr ecx,2
        movzx ecx,BYTE ptr [base64_alphabet+ecx]
        movzx eax,BYTE ptr [esi+1]
        shr eax,4
        movzx ebx,BYTE ptr [esi]
        shl ebx,4
        or ebx,eax
        and ebx,03fh
        movzx ebx,BYTE ptr [base64_alphabet+ebx]
        movzx eax,BYTE ptr [esi+1]
        shl eax,2
        and eax,03fh
        movzx eax,BYTE ptr [base64_alphabet+eax]
        xor edx,edx
        mov dh,'='
        shl edx,16
        or ecx,edx
        shl ebx,8
        or ecx,ebx
        shl eax,16
        or ecx,eax
        mov [edi],ecx
        pop eax
    .endif

    xor eax,eax
    ret
_base64 endp

程序+源码+参考资料已打包

base64.rar (20.87 KB)


[[it] 本帖最后由 zklhp 于 2008-8-11 12:45 编辑 [/it]]
搜索更多相关主题的帖子: 汇编 编码 
2008-08-09 02:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
自己顶下吧
2008-08-11 12:48
快速回复:用win32汇编实现base64编码函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026223 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved