2016-09-04 65 views
0

我们有一些网络控制器(Aruba)可以在UDP端口上向RTLS服务器发送HMAC-SHA1签名消息。我们编写了简单的Java程序,并部署在接收UDP端口数据包的Linux服务器上。控制器使用一个密钥对消息进行签名,因此我们以消解格式获取消息如下。有没有一种方法可以使用共享密钥从中提取实际的消息?Java读取HMAC-SHA1签名消息

RECEIVED:* GDRE $�p��s�〜�����q���2 RECEIVED:,$drÈ�H)��5ï ¿½r�[�b×C�`�� 已收到:0� ������a��#�ï�cL�iï¿¿ ½?�� 已收到:+ïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïï¿

Java代码接收消息:

public class UDPServer 
{ 
    public static void main(String args[]) throws Exception 
     { 
     DatagramSocket serverSocket = new DatagramSocket(9999); 
      byte[] receiveData = new byte[1024]; 
      byte[] sendData = new byte[1024]; 
      while(true) 
       { 
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
        serverSocket.receive(receivePacket); 
        String response = new String(receivePacket.getData(), 0, 
          receivePacket.getLength(), "UTF-8"); 

        System.out.println("RECEIVED: " + response); 
//     
       } 
     } 
} 
+0

可能会遗漏您的问题,但HMAC用于确保邮件是真实的。共享密钥和消息用于产生特殊的散列,如果它等于在消息结尾处发送的散列,则该消息是可信的。所以如果只使用一个HMAC,那么其余的数据都是纯文本的,应该能够被读取(可以是二进制格式,查看文档)。但是,如果也正在使用加密,则必须先使用共享密钥来解密数据才能读取数据。 –

回答

0

我们发现消息被使用谷歌protubuf序列化。使用.proto文件,我们能够生成所需的对象和反序列化。