找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5629|回复: 0

[开源] VFP+ASM打造快速XOR异或加密

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2011-7-27 12:20:02 | 显示全部楼层 |阅读模式
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,[EBP+14]  'MOVE  EAX,PWLEN
       +0h85C0;                       && TEST    EAX,EAX
       +0h743F;                   && JZ         EXIT
       +0h8B4D0C;              && MOV     ECX,[EBP+C]  'MOV ECX,LEN  'ECX=LEN
       +0hD1E1;                   && SHL     ECX,1
       +0h8B5508;               && MOV     EDX,[EBP+8]
       +0h01CA;                   && ADD     EDX,ECX
       +0hF7D9;                   && NEG     ECX
       +0h8B5D14;               && MOV     EBX,[EBP+14]
       +0hD1E3;                   && SHL     EBX,1
       +0h8B4510;                && MOV     EAX,[EBP+10]
       +0h01D8;                   && ADD     EAX,EBX
       +0h894510;                && MOV     [EBP+10],EAX
       +0hF7DB;                   && NEG     EBX
       +0h895D14;                && MOV     [EBP+14],EBX
       +0h8B040A;               && MOV     EAX,[EDX+ECX]
       +0h035D10;                && ADD     EBX,[EBP+10]
       +0h3203;                     && XOR     AL,[EBX]
       +0h2B5D10;               && SUB     EBX,[EBP+10]
       +0h81C302000000;     && ADD     EBX,2
       +0h7503;                    && JNZ     SHORT 00000048
       +0h8B5D14;               && MOV     EBX,[EBP+14]
       +0h89040A;                && MOV     [EDX+ECX],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
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表