阿杰 发表于 2011-7-27 12:20:02

VFP+ASM打造快速XOR异或加密

XOR加密解密是同一过程,你懂的!

DECLARE integer CallWindowProc IN USER32 Long,Long,Long, Long,Long
DECLARE integer HeapAlloc IN WIN32API integer,integer,integer
DECLARE integer GetProcessHeap IN WIN32API
DECLARE integer HeapFree IN WIN32API integer,integer,integer

AsmCode=0H55;            && PUSH    EBP
       +0H89E5;                  && MOV   EBP,ESP
       +0H53;                      && PUSH    EBX
       +0h56;                     && PUSH    ESI
       +0h57;                           && PUSH    EDI
       +0h8B450C;               && MOV   EAX,Len    '测试长度为0的字符串
       +0h85C0;                   && TEST    EAX,EAX
       +0h7446;                   && JZ          EXIT
       +0h8B4514;               && MOV   EAX,'MOVEEAX,PWLEN
       +0h85C0;                     && TEST    EAX,EAX
       +0h743F;                   && JZ         EXIT
       +0h8B4D0C;            && MOV   ECX,'MOV ECX,LEN'ECX=LEN
       +0hD1E1;                   && SHL   ECX,1
       +0h8B5508;               && MOV   EDX,
       +0h01CA;                   && ADD   EDX,ECX
       +0hF7D9;                   && NEG   ECX
       +0h8B5D14;               && MOV   EBX,
       +0hD1E3;                   && SHL   EBX,1
       +0h8B4510;                && MOV   EAX,
       +0h01D8;                   && ADD   EAX,EBX
       +0h894510;                && MOV   ,EAX
       +0hF7DB;                   && NEG   EBX
       +0h895D14;                && MOV   ,EBX
       +0h8B040A;               && MOV   EAX,
       +0h035D10;                && ADD   EBX,
       +0h3203;                     && XOR   AL,
       +0h2B5D10;               && SUB   EBX,
       +0h81C302000000;   && ADD   EBX,2
       +0h7503;                  && JNZ   SHORT 00000048
       +0h8B5D14;               && MOV   EBX,
       +0h89040A;                && MOV   ,EAX
       +0h81C102000000;   && ADD   ECX,2
       +0h75DF;                     && JNZ   SHORT 00000032
       +0h31C0;                     && XOR   EAX,EAX
       +0h5F;                         && POP   EDI
       +0h5E;                         && POP   ESI
       +0h5B;                         && POP   EBX
       +0h89EC;                        && MOV   ESP,EBP
       +0h5D;                         && POP   EBP
       +0hC21000                  && RETN    10


hProcHeap = GetProcessHeap()   
PtrAsm=HeapAlloc(hProcHeap,0,LEN(AsmCode))
SYS(2600,PtrAsm,LEN(AsmCode),AsmCode)
uPas='行者孙'&&密匙
PtrPas=HeapAlloc(hProcHeap,0,LEN(uPas))
SYS(2600,PtrPas,LEN(uPas),uPas)
FOR i=1 TO 1000 &&这里你就可以循环加密数据了
    uStr='VFP应用程式算法群祝大家2011年万事如意'&&被加密的字符串
    PtrStr=HeapAlloc(hProcHeap,0,LEN(uStr))
    SYS(2600,PtrStr,LEN(uStr),uStr)
    CallWindowProc(PtrAsm,PtrStr,LEN(uStr),PtrPas,LEN(uPas))
    EnDeCryptStr=SYS(2600,PtrStr,LEN(uStr))&&获取加密结果
    HeapFree(hProcHeap,0,PtrStr) &&用完后及时释放内存,不然直接挂掉
    ? EnDeCryptStr
ENDF
HeapFree(hProcHeap,0,PtrAsm)
HeapFree(hProcHeap,0,PtrPas)

&&来源:http://hi.baidu.com/myvfp/blog/item/5e0b3fc26a9c83090ff47750.html
页: [1]
查看完整版本: VFP+ASM打造快速XOR异或加密