我绕道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);
}
我的代码出了什么问题?
谢谢!
答案 0 :(得分:0)
你忘了实施协议了!无论您使用哪种协议来加密和解密数据,都必须实际实现它。它必须定义块大小,填充等。它不仅仅是神奇的工作。 (请注意,使用流密码会比使用分组密码更容易 。)
另外,不要在任意二进制数据上调用strlen
! strlen
函数仅适用于C风格的字符串。
此外,这行代码不符合您的想法:
(char *) buff = plaintext; // now strlen(buff) is 5!!
更改buff
的值,即保存指向缓冲区的指针的变量,对缓冲区的内容没有影响。这就是所有来电者所关心的。