首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >装配代码。加密解密例程

装配代码。加密解密例程
EN

Stack Overflow用户
提问于 2013-07-25 14:37:10
回答 1查看 1.3K关注 0票数 0
  • 有人能帮我看看这个,帮我找出一个解密来逆转用户输入的字符串吗?我不是说只是做这个程序的反面。推送edx不eax添加eax,0x04 mov edx,eax pop eax xor eax,edx pop rol al,1 rol al,1 sub,0x02 ret *

寄存器是:内- ecx:加密密钥.要加密的字符。

向外- eax:加密字符

谢谢你花时间看我。

EN

回答 1

Stack Overflow用户

发布于 2013-07-25 15:14:22

该算法是对称的,因为我可以解密每个字符和密钥组合。

循环测试了这两个函数在解密返回值时是否有任何错误:

代码语言:javascript
复制
#include <iostream>
using namespace std;

unsigned char enc(unsigned char ch, unsigned char key)
{
    unsigned char tmp = key^(~ch+(unsigned char)0x04);
    return (( (tmp<<3) | (tmp>>5) ) & 0xff)-0x02;
}

unsigned char dec(unsigned char ch, unsigned char key)
{
    unsigned char tmp = (ch+0x02);
    tmp = ((tmp>>3) | (tmp<<5)) & 0xff;
    return ~((tmp^key )-(unsigned char)0x04);
}

int main()
{
    // single encryption test
    char c = 'A';
    char key = 'K';
    cout << "single test:" << (char)enc(c, key) << endl;

    bool problem = false;
    int k, ch;
    for(k=0;k<256;k++)
    {

        for(ch=0;ch<256;ch++)
        {
            if( enc( dec((unsigned char)ch, (unsigned char)k), k) != ch )
            {
                problem = true;
                cout << "error k=" << k << "c=" << ch
                     << "result=" <<  (unsigned int)enc( dec((unsigned char)ch, (unsigned char)key), (unsigned char)key) << endl;

            }
        }
    }
    if(problem) cout << "There was a problem." << endl;
    else cout << "There was no problem." << endl;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17861106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档