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所示。
图 12-13 UDP交互消息拦截2
打开“Follow UDP Stream”窗口,我们得到的将是一串Base64编码字符串,如图12-14所示。
图 12-14 UDP交互内容Base64编码
实际上,我们发送了一条问候消息,如图12-15所示。
通过第5章的阐述,我们知道经过Base64编码的数据本身并不安全,任何监听者都可以对其进行破解。
图 12-15 UDP聊天窗口Base64编码
虽然,Base64编码数据并不安全,但在实际应用中很多软件都采用Base64编码的方式对数据进行隐藏。想要真正起到保护数据机密性的作用,需采用对称加密算法或非对称加密算法对数据加密。