原帖及讨论:http://bbs.bccn.net/thread-228639-1-1.html 再发个偶写的base64算发的解码函数 请高手指点 .data base64table db 43 dup (255) db 62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255 db 255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13 db 14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255 db 255,255,26,27,28,29,30,31,32,33,34,35,36,37,38 db 39,40,41,42,43,44,45,46,47,48,49,50,51 db 132 dup (255)
.code ;************************************************************************************************** ;进行base64解码的函数 ;参数:_lpszSrc 指向输入缓冲区 _lpszDst 指向输出缓冲区 _dwSrcLen 想要加密的长度 ;返回值:成功返回0 失败返回 -1 ;作者:zklhp Email:zklhp@sina.com ;时间:2008.8.16 ;版权所有 转载请保持完整 ;************************************************************************************************** _Base64Decode proc uses ebx edi esi _lpszSrc:DWORD,_lpszDst:DWORD,_dwSrcLen:DWORD
;错误处理 .if (_lpszSrc==NULL)||(_lpszDst==NULL)||(_dwSrcLen==0) xor eax,eax dec eax ret .endif mov eax,_dwSrcLen and eax,11b .if eax != 0 xor eax,eax dec eax ret .endif
mov esi,_lpszSrc mov edi,_lpszDst mov ecx,_dwSrcLen shr ecx, 2 cld
@@loop: xor ebx,ebx lodsd mov edx,eax
and eax,0ffh mov al, BYTE ptr [offset base64table + eax] .if al == 255 xor eax,eax dec eax ret .endif shl ebx,6 or bl,al shr edx,8
mov eax,edx and eax,0ffh mov al, BYTE ptr [offset base64table + eax] .if al == 255 xor eax,eax dec eax ret .endif shl ebx,6 or bl,al shr edx,8
mov eax,edx and eax,0ffh mov al, BYTE ptr [offset base64table + eax] .if al == 255 xor eax,eax dec eax ret .endif shl ebx,6 or bl,al shr edx,8
mov eax,edx and eax,0ffh mov al, BYTE ptr [offset base64table + eax] .if al == 255 xor eax,eax dec eax ret .endif shl ebx,6 or bl,al shr edx,8
mov eax,ebx shl eax,8 bswap eax stosd dec edi dec ecx jnz @@loop xor eax,eax ret
_Base64Decode endp |
算发参考了老罗的代码 在此表示感谢
程序+代码+参考资料 已打包 base64decode.rar  
|