程序集加密解密程序

时间:2014-04-06 04:30:02

标签: c++ assembly x86

以下程序编译和工作 但是我无法弄清楚要为解密部分写什么。

有人可以帮我写相应的decrypt_chars()例程吗?

void encrypt_chars(int length, char EKey)
{
    char temp_char; // char temporary store
    for (int i = 0; i < length; i++) // encrypt characters one at a time
    {
        temp_char = OChars[i]; 
        __asm {                         
            push   eax  // save register values on stack to be safe
            push   ecx          //
            movzx  ecx, temp_char       // 
            lea    eax, EKey                
            call   encrypt     // encrypt the character
            mov    temp_char, al            
            pop    ecx // restore original register values from stack
            pop    eax                  //
        }
        EChars[i] = temp_char;  // Store encrypted char in the encrypted chars array
    }
    return;

    // --- Start of Assembly code
    __asm {

// Inputs: register EAX = 32-bit address of Ekey, 
//ECX = the character to be encrypted (in the low 8-bit field, CL).
// Output: register EAX = the encrypted value of the source character (in the low 8-bit field, AL).


    encrypt5: push eax
        mov  al, byte ptr[eax]
        push ecx
        and eax, 0x7C
        ror eax, 1
        ror eax, 1
        inc eax
        mov edx, eax
        pop ecx
        pop eax
        mov byte ptr[eax], dl
        xor edx, ecx
        mov eax, edx
        rol al, 1
        ret

    encrypt:
        mov eax, ecx    // get character
        inc eax  

        ret
    }

    //--- End of Assembly code
}
// end of encrypt_chars function


void decrypt_chars(int length, char EKey)
{
    /* needs to be written */

    return;
}

1 个答案:

答案 0 :(得分:0)

现在看来,似乎解密几乎是微不足道的。虽然encrypt5代码试图做更精细的事情,但这里似乎实际使用的所有内容都是encrypt例程,它只是增加每个输入(完全忽略键),所以{{1} }变为AB变为B,依此类推。

因此,解密例程同样重要:

C

如果你真的坚持用汇编语言这样做,那么核心就会是这样的:

void decrypt(char *data, int length) {
    for (int i=0; i<length; i++)
        --data[i];
}

然后你会对加密感兴趣,并为输入字符串中的每个字符调用一次。

如果/如果加密被修复以执行某些操作而不仅仅是递增每个输入字符,则需要更新解密以匹配。当然,正如它现在所说的那样,加密并不值得加密#34;完全 - 因为它没有密钥,它提供了精确的零安全性。