0

我绕过recv函数,我试图解密缓冲区,但解密函数改变缓冲区大小,我认为解密无效,代码:

int WINAPI OwnRecv(SOCKET s, char FAR *buff, int len, int flags)
{
    if(s == GameClientSocket)
    {
        int received = pTrampolineRecv(s, buff, len, flags);

        if(received <= 0)
        {
            return received;
        }
            // now strlen(buff) is 2!!
        char * plaintext;
        plaintext = (char *)aes_decrypt(&Decrypt_Context, (unsigned char*)buff, &received);
        (char *) buff = plaintext; // now strlen(buff) is 5!!
        return received;
    }
    return pTrampolineRecv(s, buff, len, flags);
}

我的代码有什么问题?

谢谢!

4

1 回答 1

0

你忘了实现一个协议!无论您使用什么协议来加密和解密数据,您都必须实际实现它。它必须定义块大小、填充等。它不仅仅靠魔法起作用。(请注意,使用流密码比使用分组密码更容易。

另外,不要调用strlen任意二进制数据!该strlen函数仅适用于 C 风格的字符串。

此外,这行代码并没有按照您的想法执行:

    (char *) buff = plaintext; // now strlen(buff) is 5!!

更改 的值(buff保存指向缓冲区的指针的变量)对缓冲区的内容没有影响。这就是调用者所关心的。

于 2012-05-19T10:25:51.057 回答