我正在尝试使用 Schannel SSPI 使用套接字通过 SSL 连接发送/接收数据。我有一些问题DecryptMessage()
1) MSDN说,有时应用程序会从远程方接收数据,然后使用成功解密它,DecryptMessage()
但输出数据缓冲区将为空。这是正常的,应用程序必须能够处理它。(据我了解,“空”表示 SecBuffer::cbBuffer==0)
我应该如何处理?我正在尝试创建一个(安全)srecv()
函数,以替代 winsockrecv()
函数。因此我不能只返回 0。因为调用应用程序会认为远程方已经关闭了连接。我应该尝试从连接中接收另一个加密块并尝试解密它吗?
2)还有另一个问题。使用 (return value = SEC_E_OK) 成功解密数据后 DecryptMessage
,我试图SECBUFFER_DATA
在输出缓冲区中找到一个类型缓冲区。
PSecBuffer pDataBuf=NULL;
for(int i = 1; i < 4; ++i) { // should I always start with 1?
if(NULL == pDataBuf && SECBUFFER_DATA == buffers[i].BufferType) {
pDataBuf = buffers+i;
}
}
如果我没有找到数据缓冲区怎么办?我应该将其视为错误吗?还是我应该再次尝试接收加密块来解密它?(我看到了几个例子。其中一个他们正在重试接收数据,另一个他们正在报告错误)