Advertisement
ElvishJerricco

LanChan

Nov 12th, 2012
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.65 KB | None | 0 0
  1. import java.awt.BorderLayout;
  2. import java.awt.Dimension;
  3. import java.awt.EventQueue;
  4.  
  5. import javax.swing.*;
  6. import javax.swing.border.*;
  7. import java.awt.event.ActionListener;
  8. import java.awt.event.ActionEvent;
  9. import java.io.IOException;
  10. import java.net.*;
  11. import java.security.*;
  12. import java.security.spec.*;
  13. import javax.xml.bind.DatatypeConverter;
  14. import javax.crypto.*;
  15. import javax.crypto.spec.*;
  16.  
  17. import java.awt.Color;
  18. import javax.swing.SwingConstants;
  19.  
  20.  
  21. public class LanChan extends JFrame {
  22.     final int port = 1337;
  23.     final int sendport = 1338;
  24.     private MulticastSocket receive;
  25.     private MulticastSocket send;
  26.     private String nick, pass;
  27.     private InetAddress group;
  28.     private JPanel contentPane;
  29.     private JTextField textField;
  30.     private JLabel lblLanchanV;
  31.     private JScrollPane scrollPane;
  32.     private JTextArea textArea;
  33.    
  34.     /**
  35.      * Launch the application.
  36.      */
  37.     public static void main(String[] args) {
  38.         try {
  39.             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  40.         } catch (Exception e1) {
  41.             // TODO Auto-generated catch block
  42.             e1.printStackTrace();
  43.         }
  44.         EventQueue.invokeLater(new Runnable() {
  45.             public void run() {
  46.                 try {
  47.                     LanChan frame = new LanChan();
  48.                     frame.setVisible(true);
  49.                 } catch (Exception e) {
  50.                     e.printStackTrace();
  51.                 }
  52.             }
  53.         });
  54.     }
  55.     String encrypt(String str) {
  56.         String encryptedValue = "";
  57.         try {
  58.             SecretKeyFactory f;
  59.             f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
  60.             KeySpec ks = new PBEKeySpec(pass.toCharArray(), new byte[] { 0x7d, 0x60, 0x43, 0x5f, 0x02, (byte) 0xe9, (byte) 0xe0, (byte) 0xae }, 1024, 128);
  61.             SecretKey s = f.generateSecret(ks);
  62.             Key k = new SecretKeySpec(s.getEncoded(),"AES");
  63.            
  64.             Cipher c = Cipher.getInstance("AES");
  65.             c.init(Cipher.ENCRYPT_MODE, k);
  66.             byte[] encVal = c.doFinal(str.getBytes());
  67.             encryptedValue = DatatypeConverter.printBase64Binary(encVal);
  68.         } catch (Exception e) {
  69.             e.printStackTrace();
  70.         }
  71.         return encryptedValue;
  72.     }
  73.     String decrypt(String str) {
  74.         String decryptedValue = "";
  75.         try {
  76.             SecretKeyFactory f;
  77.             f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
  78.             KeySpec ks = new PBEKeySpec(pass.toCharArray(), new byte[] { 0x7d, 0x60, 0x43, 0x5f, 0x02, (byte) 0xe9, (byte) 0xe0, (byte) 0xae }, 1024, 128);
  79.             SecretKey s = f.generateSecret(ks);
  80.             Key k = new SecretKeySpec(s.getEncoded(),"AES");
  81.            
  82.             Cipher c = Cipher.getInstance("AES");
  83.             c.init(Cipher.DECRYPT_MODE, k);
  84.             byte[] encVal = new byte[0];
  85.             try {
  86.                 encVal = c.doFinal(DatatypeConverter.parseBase64Binary(str));
  87.             } catch(BadPaddingException e) {
  88.                 System.out.println("Packet from other channel received... Could not decrypt.");
  89.             }
  90.             decryptedValue = new String(encVal, "UTF-8");
  91.         } catch (Exception e) {
  92.             e.printStackTrace();
  93.         }
  94.         return decryptedValue;
  95.     }
  96.     void enter() {
  97.         String input = textField.getText();
  98.         textField.setText("");
  99.         input = "<" + nick + "> " + input;
  100.         input = encrypt(input);
  101.         byte buffer[] = input.getBytes();
  102.         DatagramPacket pack = new DatagramPacket(buffer, buffer.length, group, port);
  103.         try {
  104.             send.send(pack);
  105.         } catch (IOException e) {
  106.             // TODO Auto-generated catch block
  107.             e.printStackTrace();
  108.         }
  109.     }
  110.     /**
  111.      * Create the frame.
  112.      */
  113.     public LanChan() {
  114.         setTitle("LanChan");
  115.         this.setMinimumSize(new Dimension(100, 100));
  116.        
  117.         nick = JOptionPane.showInputDialog(new JFrame("Nickname"), "Enter a username:");
  118.         if (nick == null) {
  119.             System.exit(1);
  120.         }
  121.         pass = JOptionPane.showInputDialog(new JFrame("Channel"), "Enter your channel:");
  122.         if (pass == null) {
  123.             System.exit(1);
  124.         }
  125.        
  126.         String ip = "224.0.0.9";
  127.         try {
  128.             group = InetAddress.getByName(ip);
  129.             receive = new MulticastSocket(port);
  130.             send = new MulticastSocket(sendport);
  131.             send.joinGroup(group);
  132.             receive.joinGroup(group);
  133.         } catch (IOException e) {
  134.             // TODO Auto-generated catch block
  135.             e.printStackTrace();
  136.         }
  137.        
  138.         new Thread(new Runnable() {
  139.             @Override
  140.             public void run() {
  141.                 while(true) {
  142.                     byte[] buf = new byte[1024];
  143.                     DatagramPacket p = new DatagramPacket(buf, buf.length);
  144.                     try {
  145.                         receive.receive(p);
  146.                     } catch (IOException e) {
  147.                         // TODO Auto-generated catch block
  148.                         e.printStackTrace();
  149.                     }
  150.                     String received = new String(p.getData());
  151.                     received = decrypt(received);
  152.                     JScrollBar vertical = scrollPane.getVerticalScrollBar();
  153.                     vertical.setValue( vertical.getMaximum() );
  154.                     textArea.append(received + "\n");
  155.                 }
  156.             }
  157.         }).start();
  158.        
  159.        
  160.        
  161.        
  162.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  163.         setBounds(100, 100, 450, 300);
  164.         contentPane = new JPanel();
  165.         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  166.         contentPane.setLayout(new BorderLayout(0, 0));
  167.         setContentPane(contentPane);
  168.        
  169.         textField = new JTextField();
  170.         textField.addActionListener(new ActionListener() {
  171.             public void actionPerformed(ActionEvent arg0) {
  172.                 enter();
  173.             }
  174.         });
  175.         contentPane.add(textField, BorderLayout.SOUTH);
  176.         textField.setColumns(10);
  177.        
  178.         lblLanchanV = new JLabel("v0.2");
  179.         lblLanchanV.setInheritsPopupMenu(false);
  180.         lblLanchanV.setHorizontalAlignment(SwingConstants.TRAILING);
  181.         contentPane.add(lblLanchanV, BorderLayout.NORTH);
  182.        
  183.         scrollPane = new JScrollPane();
  184.         scrollPane.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
  185.         scrollPane.setAutoscrolls(true);
  186.         contentPane.add(scrollPane, BorderLayout.CENTER);
  187.        
  188.         textArea = new JTextArea();
  189.         textArea.setLineWrap(true);
  190.         textArea.setAutoscrolls(false);
  191.         textArea.setEditable(false);
  192.         textArea.setBorder(null);
  193.         textArea.setBackground(Color.LIGHT_GRAY);
  194.         scrollPane.setViewportView(textArea);
  195.     }
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement