首页
社区
课程
招聘
[求助]超简单算法,高手帮忙写个解密算法
发表于: 2010-9-14 22:28 4655

[求助]超简单算法,高手帮忙写个解密算法

2010-9-14 22:28
4655
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 52
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢下面2位大神
2010-9-14 22:32
0
雪    币: 52
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢下面2位大神
2010-9-15 08:46
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
加密和解密算法是一样的

#include <stdio.h>
#include <windows.h>//BYTE

BYTE Encode(BYTE AL)
{
        //BYTE AL = 0;//输入
        BYTE AH = 0;
        AL = ~AL;
        AH = AL<<4;
        AH = AH|(AL>>4);
        return AH;
}

BYTE Decode(BYTE AH)
{
        BYTE AL = 0;
        AL = AH<<4;
        AL = AL|(AH>>4);
        AL = ~AL;
        return AL;
}

int main(int c,char *v[])
{
        printf("%X->%X\n",0x89,Encode(0x89));
        printf("%X->%X\n",0x67,Decode(0x67));
        printf("%X->%X\n",0x67,Encode(0x67));
}
2010-9-15 09:10
0
雪    币: 2573
活跃值: (4323)
能力值: ( LV13,RANK:540 )
在线值:
发帖
回帖
粉丝
5
嗯 学习了!
2010-9-15 10:53
0
雪    币: 2573
活跃值: (4323)
能力值: ( LV13,RANK:540 )
在线值:
发帖
回帖
粉丝
6
刚把代码又重新研究了一下,感觉还有点意思,又正好这段时间在研究汇编,在朋友的帮助下,自己用汇编也写了一个,用两种方法表示一个:纯汇编和内联汇编
纯汇编,代码如下:
.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

.data
szFormat   db '%x->%x',0
szData1    db 67H
szData2    db 89H
szCaption1 db '将0x67加密后得',0
szCaption2 db '将0x89解密后得',0

.code
_EnCode proc @AL:BYTE

        LOCAL @szOut
       
        mov al, @AL
        mov ah, 0
        not al
        mov bl, al
        shl bl, 4
        mov ah, bl
        shr al, 4
        or  ah, al
               
        movzx eax,ah
        movzx ebx,szData1
        invoke wsprintf,addr @szOut,addr szFormat,ebx,eax
        invoke MessageBox,NULL,addr @szOut,addr szCaption1,MB_OK
        ret

_EnCode endp

_DeCode proc @AH:BYTE
       
        LOCAL @szOut
       
        mov ah,@AH
        mov bh,ah
        shl bh,4
        mov al,bh
        shr ah,4
        or  al,ah
        not al
       
       
        movzx eax,al
        movzx ebx,szData2
        invoke wsprintf,addr @szOut,addr szFormat,ebx,eax
        invoke MessageBox,NULL,addr @szOut,addr szCaption2,MB_OK
        ret

_DeCode endp

start:
        invoke _EnCode,szData1
        invoke _DeCode,szData2
        ret
end start

内联汇编代码如下:
#include <stdio.h>
#include <windows.h>

BYTE Encode (BYTE x)
{

        BYTE y = 0;
        __asm
        {
                mov al, x
                mov ah, 0
                not al
                mov bl, al
                shl bl, 4
                mov ah, bl
                shr al, 4
                or  ah, al
                mov        y, ah
        }

        return y;

}

BYTE Decode (BYTE a)
{

        BYTE b = 0;

        __asm
        {
                mov ah,a
                mov bh,ah
                shl bh,4
                mov al,bh
                shr ah,4
                or al,ah
                not al
                mov b,al       
        }
        return b;
}

void main(int c,char* v[])
{
        printf("Encrypt 0x67!");
        printf("\n");
        printf("%x->%x",0x67,Encode(0x67));
        printf("\n");
        printf("Decrypt 0x89!");
        printf("\n");
        printf("%x->%x",0x89,Decode(0x89));
        printf("\n");

}

两段代码分别在VC6.0和RadASM下编译通过!!
其实只要有算法,用那种语方实现都只是语法的问题,代码核心部分和LS差不多,写下了,只是为以后复习做准备,呵呵~~其实汇编语言真的很好,用处很大,学好的汇编再去学其它的语言,一定会事半功倍的,希望大家都能牢牢掌握~~
2010-9-15 14:31
0
游客
登录 | 注册 方可回帖
返回