我正在尝试在非阻塞模式下使用SSLengine和SocketChannel。
握手正确完成但是当我尝试阅读&解密来自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中打印加密数据时我得到了:
?&gt; .// POST测试HTTP / 1.1 缓存控制:无缓存 内容长度:20 Content-Type:application / octet-stream 主持人:192.168.X.X
&GT; .//&GT; .//&GT; .//&GT; .//&GT; .//&GT; .//&GT; .//&GT; ./ /?&gt; .//?&gt; .//?&gt; .//&lt; ---加密的字符在这里
但是当我在peerAppData中打印解密数据时,我正在
POST测试HTTP / 1.1 / 缓存控制:无缓存 内容长度:20 Content-Type:application / octet-stream 主持人:192.168.X.X //然后在这里有三个空行。
这是SSlengine的解密问题吗?
由于
另外我想补充说unwrap方法返回OK状态。
答案 0 :(得分:1)
实际的POST内容很可能是空的,除了2个空行(标题后面有一行是标准的,如果我没有弄错的话)。由于PKCS#7 padding,至少16个字节的数据(一个块,AES为16个字节)将至少加密。
此外,数据还包含MAC,因为SSL通常使用MAC-then-encrypt(也称为according to most的错误方式)。
所以它可能看起来像有数据,即使它只是开销。