所有源代码都在资源中有上传,这里我们主要构建了两个项目,第一个是一个简单的web登陆页面。
一、对登陆密码加密:
搭建过程不赘述
1、数据库中执行:update account set password=MD5(password)
一开始我是这么做的:update account set password=MD5('password'),注意别傻
这样一来就将数据库中的密码用MD5摘要处理了,注意页面中相应修改代码。为加大破译难度,我们通常采用了是下面的方法,用其他信息(如邮箱)当做盐,加盐处理。
2.安全升级-加盐处理:update account set password = sha(concat(email,password))
注意相应代码修改,如校验部分:
if(p.equals(DigestUtils.shaHex(email+password)){ }
二、实例:IM应用开发安全:
安全升级-隐藏数据
安全升级-加密数据
这里我们基于UDPSocket搭建了一个聊天系统。将网络中传递的数据隐藏(Base64并)加密
socket.send(Security.encrypt(message.getBytes(CHARSET)));
byte[] data = Security.decrypt(socket.receive());
String message = new String(data,CHARSET);
实际上有了安全类之后,这么弄就行了。用wireshark无法再直接得到信息。
三、IM应用开发:
介于自己对应用搭建部分不熟,下面分析下这部分代码:
MainFrame 类:
用mainFrame对象开启一个线程:
public static void main(String[] args) throws UnknownHostException, SocketException{
MainFrame mainFrame = new MainFrame();
Thread t = new Thread(mainFrame);
t.start();
}
public void run() {
while(true){
try {
receive();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
线程内循环接收数据。
当接收到数据:
public void receive() throws UnsupportedEncodingException, IOException{
byte[] data = Security.decrypt(socket.receive());
String message = new String(data,CHARSET);
StringBuilder sb = new StringBuilder();
sb.append(receiveArea.getText());
sb.append(message);
receiveArea.setText(sb.toString());
}
解密,刷新接收框,将新收到的数据追加到最后。
怎么追加到最后的?
先把已有的数据拿到,放到StringBuilder,再追加
MainFrame类里有这几个对象:
private static final String CHARSET="UTF-8";
private UDPSocket socket;
private InitDialog initDialog;
public static final int DEFAULT_WIDTH=500;
public static final int DEFAULT_HEIGHT=400;
private JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
private JTextArea sendTextArea = new JTextArea();
private JTextArea receiveArea = new JTextArea();
private JPanel buttonPanel = new JPanel();
操作部分:UDP套接口,initDialog
图形部分:一个水平分割的pane,输入输出区,按钮区
初始化时: