我正试图在非阻塞模式下将SSLengine与SocketChannels一起使用。
握手是正确的,但当我尝试阅读&解密来自channelsocket的http帖子,只有标题被解密,正文被解密:
<code>
int num=0;
while(num==0){
num=socketChannel.read(peerNetData);
if(num==-1)
break;
}
if (num == -1) {
System.out.println("channel closed");
} else if (num == 0) {
System.out.println("no bytes to read");
} else {
// Process incoming data
peerNetData.flip();
SSLEngineResult res = engine.unwrap(peerNetData, peerAppData);
//return a ok status
peerNetData.flip();
peerAppData.flip();
System.out.println(new String(peerNetData.array()));
System.out.println(new String(peerAppData.array()));
</code>
当在peerNetData中打印加密数据时,我得到:
?>//POST测试HTTP/1.1缓存控制:无缓存内容长度:20内容类型:应用程序/八位字节流主机:192.168.X.X
?>.//?>./?>.//?>./?>.///?>.//-?>..//?>..//-?>..//-<---此处为加密字符
但是当我在peerAppData中打印解密的数据时,我得到了
POST测试HTTP/1.1/缓存控制:无缓存内容长度:20内容类型:应用程序/八位字节流主机:192.168.X.X//然后这里有三条空线。
这是SSlengine的解密问题吗??
感谢
此外,我想添加unwrap方法返回OK状态。
除了两行空行之外,实际POST内容很可能是空的(如果我没有弄错的话,头后面的一行是标准的)。由于PKCS#7填充,至少有16个字节的数据(一个块,AES为16个字节)将被加密。
此外,数据还将包含MAC,因为SSL通常使用MAC然后加密(根据大多数人的说法,也被称为错误的方法)。
因此,它看起来可能有数据,即使只是开销。