OpenSSL AES解密更改大小

时间:2012-05-19 10:23:20

标签: c++ function encryption openssl

我绕道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);
}

我的代码出了什么问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

你忘了实施协议了!无论您使用哪种协议来加密和解密数据,都必须实际实现它。它必须定义块大小,填充等。它不仅仅是神奇的工作。 (请注意,使用流密码会比使用分组密码更容易 。)

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

此外,这行代码不符合您的想法:

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

更改buff的值,即保存指向缓冲区的指针的变量,对缓冲区的内容没有影响。这就是所有来电者所关心的。