12.2.2 安全升级1—隐藏数据

Base64算法并不属于加密算法领域,但却常常用于数据隐藏。当然,这样做并不能起到数据加密的作用,但同样起到了隐藏数据的作用。我们可以对UDPChat稍作修改,隐藏用户交互的数据。

本书将使用Commons Codec提供的Base64算法实现类对数据进行隐藏。

1.增强安全性

这里,我们将构建Security类,并提供encrypt()和decrypt()方法分别用于加密和解密操作。完整代码实现如代码清单12-20所示。

代码清单12-20 Security类1


import org.apache.commons.codec.binary.Base64;

/**

*安全组件

*@author梁栋

*@since 1.0

*/

public abstract class Security{

/**

*加密

*@param data

*待加密数据

*@return byte[]加密数据

*/

public static byte[]encrypt(byte[]data){

return Base64.encodeBase64(data);

}

/**

*解密

*@param data

*待解密数据

*@return byte[]解密数据

*/

public static byte[]decrypt(byte[]data){

return Base64.decodeBase64(data);

}

}


对MainFrame类稍作修改,修改send()方法,使用Security类的encrypt()方法对数据编码,如代码清单12-21所示。

代码清单12-21 修改消息发送方法


public void send(String message)throws IOException{

//省略

socket.send(Security.encrypt(message.getBytes(CHARSET)));

//省略

}


修改receive()方法,使用Security类的decrypt()方法对数据解码,如代码清单12-22所示。

代码清单12-22 修改消息接收方法


public void receive()throws IOException{

//解密

byte[]data=Security.decrypt(socket.receive());

String message=new String(data, CHARSET);

//省略

}


接下来,我们将监测通过Base64算法增强安全性后的UDPChat。

2.网络监测

我们重复前面的操作,使用UDPChat进行交互,并通过Wireshark对UDPChat交互数据包监测,如图12-13所示。

figure_0427_0153

图 12-13 UDP交互消息拦截2

打开“Follow UDP Stream”窗口,我们得到的将是一串Base64编码字符串,如图12-14所示。

figure_0427_0154

图 12-14 UDP交互内容Base64编码

实际上,我们发送了一条问候消息,如图12-15所示。

通过第5章的阐述,我们知道经过Base64编码的数据本身并不安全,任何监听者都可以对其进行破解。

figure_0428_0155

图 12-15 UDP聊天窗口Base64编码

虽然,Base64编码数据并不安全,但在实际应用中很多软件都采用Base64编码的方式对数据进行隐藏。想要真正起到保护数据机密性的作用,需采用对称加密算法或非对称加密算法对数据加密。