SSLEngine不会解密所有数据

时间:2014-10-06 17:45:19

标签: rest http ssl encryption sslengine

我正在尝试在非阻塞模式下使用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状态。

1 个答案:

答案 0 :(得分:1)

实际的POST内容很可能是空的,除了2个空行(标题后面有一行是标准的,如果我没有弄错的话)。由于PKCS#7 padding,至少16个字节的数据(一个块,AES为16个字节)将至少加密。

此外,数据还包含MAC,因为SSL通常使用MAC-then-encrypt(也称为according to most的错误方式)。

所以它可能看起来像有数据,即使它只是开销。