CBC Conversion Program

Posted on by on August 1st, 2011 | 0 Comments »
In this programming assignment you are going to implement the problem you solved in assignment 4 problem 6 using modified CBC as described in the assignment. The assignment problem is restated with modified CBC making it suitable for programming assignment. Assume that our encryption method is Vigenère Cipher with four characters key provided by  input. Our hardware can encrypt four characters at a time. We want to send messages using modified CBC mode. In this modified CBC change all exclusive operations of CBC by addition and then mod 26. Assume that the value of Key is read as an input of four alphabetic characters. You should check the validity of the input. Your program should reject the invalid input and give a message and then ask to provide valid input again. Assume that value of IV is read as an input of four alphabetic characters. You should check the validity of the input. Your program should reject the invalid input and give a message and then ask to provide valid input again. Now read a message of alphabetic string of maximum 100 characters. If the message is not a multiple of four characters, pad the input message with character Z at the end of the message by 1 to 3 characters to make the message a multiple of four characters. Show the encrypted message output of the input message (multiple of four characters) by using CBC. Now decrypt the message to show that you get your message back. For decryption, you will subtract ( instead of addition) and then take mod 26.You need to see modes of operation Tegrity lecture or modes of operation slides to work on this problem.

Screenshot:

 

Assignment (PDF)

Work

Source Code




/*
 * MainFrame.java
 *
 * Created on Jul 30, 2011, 12:05:21 AM
 */
package gui;

import java.awt.Color;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

/**
 * Customizes the FileChooser to only look for .txt files.
 */
class TextFilter extends javax.swing.filechooser.FileFilter {

    /**
     * Makes the FileChooser only view folders or .txt documents.
     *
     * @param file
     *
     * @return
     */
    @Override
    public boolean accept(File file) {
        return file.isDirectory() || file.getAbsolutePath().endsWith(".txt");
    }

    /**
     * Changes what is displayed so the user knows what she is looking at.
     *
     * @return The String that you want as the "label"
     */
    @Override
    public String getDescription() {
        return "Text documents (*.txt)";
    }
}

/**
 *
 * @author Nicholas Guthrie
 */
public class MainFrame extends javax.swing.JFrame {

    private static char cbc[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
    int init[];
    String encrypted_message;
    String decrypted_message;
    String Checksum;

    /** Creates new form MainFrame */
    public MainFrame() {
        initComponents();
    }

    private int Search(char c) {
        for (int i = 0; i < 26; i++) {
            if (MainFrame.cbc[i] == c) {
                return i;
            }
        }
        return -1;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // //GEN-BEGIN:initComponents
    private void initComponents() {

        buttonGroup_mode = new javax.swing.ButtonGroup();
        buttonGroup_checksum = new javax.swing.ButtonGroup();
        jFileChooser = new javax.swing.JFileChooser();
        jDialog_error = new javax.swing.JDialog();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jPanel1 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        jScrollPane_plain = new javax.swing.JScrollPane();
        jEditorPane_plain = new javax.swing.JEditorPane();
        jPanel5 = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        jEditorPane_encrypted = new javax.swing.JEditorPane();
        jPanel2 = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        jTextField_init = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jTextField_key = new javax.swing.JTextField();
        jPanel7 = new javax.swing.JPanel();
        jRadioButton_encrypt = new javax.swing.JRadioButton();
        jRadioButton_decrypt = new javax.swing.JRadioButton();
        jPanel8 = new javax.swing.JPanel();
        jRadioButton_no = new javax.swing.JRadioButton();
        jRadioButton_yes = new javax.swing.JRadioButton();
        jTextField_checksum = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextPane_instructions = new javax.swing.JTextPane();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenuItem4 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        jMenuItem3 = new javax.swing.JMenuItem();

        jFileChooser.setFileFilter(new TextFilter());
        jFileChooser.setForeground(java.awt.Color.black);

        jDialog_error.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        jDialog_error.setTitle("Invalid Input");
        jDialog_error.setAlwaysOnTop(true);
        jDialog_error.setBackground(java.awt.Color.gray);
        jDialog_error.setResizable(false);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jTextArea1.setText("Input that is not alphanumeric has been detected.\nAll input has been erased been reset.\n\nValid input can be:\nA B C D E F G H I J K L M N O P Q R S T U V W X Y Z\na b c d e f g h i j k l m n o p q r s t u v w x y z");
        jScrollPane2.setViewportView(jTextArea1);

        javax.swing.GroupLayout jDialog_errorLayout = new javax.swing.GroupLayout(jDialog_error.getContentPane());
        jDialog_error.getContentPane().setLayout(jDialog_errorLayout);
        jDialog_errorLayout.setHorizontalGroup(
            jDialog_errorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jDialog_errorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 418, Short.MAX_VALUE)
                .addContainerGap())
        );
        jDialog_errorLayout.setVerticalGroup(
            jDialog_errorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jDialog_errorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setForeground(java.awt.Color.darkGray);
        setResizable(false);

        jPanel1.setBackground(java.awt.Color.black);

        jPanel3.setBackground(java.awt.Color.darkGray);
        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Encryption / Decryption", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Consolas", 1, 14), java.awt.Color.orange)); // NOI18N

        jPanel4.setBackground(java.awt.Color.darkGray);
        jPanel4.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));

        jLabel4.setFont(new java.awt.Font("Consolas", 1, 12));
        jLabel4.setForeground(java.awt.Color.green);
        jLabel4.setText("Plain Text");

        jScrollPane_plain.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        jScrollPane_plain.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        jEditorPane_plain.setBackground(java.awt.Color.lightGray);
        jEditorPane_plain.setFont(new java.awt.Font("Consolas", 0, 13));
        jEditorPane_plain.setAutoscrolls(false);
        jEditorPane_plain.setDisabledTextColor(new java.awt.Color(255, 255, 255));
        jEditorPane_plain.setEnabled(false);
        jEditorPane_plain.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jEditorPane_plainKeyReleased(evt);
            }
        });
        jScrollPane_plain.setViewportView(jEditorPane_plain);

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane_plain, javax.swing.GroupLayout.DEFAULT_SIZE, 757, Short.MAX_VALUE)
                    .addComponent(jLabel4))
                .addContainerGap())
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane_plain, javax.swing.GroupLayout.DEFAULT_SIZE, 126, Short.MAX_VALUE)
                .addContainerGap())
        );

        jPanel5.setBackground(java.awt.Color.darkGray);
        jPanel5.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

        jLabel5.setFont(new java.awt.Font("Consolas", 1, 12));
        jLabel5.setForeground(java.awt.Color.green);
        jLabel5.setText("Encrypted Text");

        jScrollPane3.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        jScrollPane3.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        jEditorPane_encrypted.setBackground(java.awt.Color.lightGray);
        jEditorPane_encrypted.setEditable(false);
        jEditorPane_encrypted.setFont(new java.awt.Font("Consolas", 0, 13));
        jEditorPane_encrypted.setForeground(new java.awt.Color(255, 255, 255));
        jEditorPane_encrypted.setAutoscrolls(false);
        jEditorPane_encrypted.setDisabledTextColor(new java.awt.Color(255, 255, 255));
        jEditorPane_encrypted.setEnabled(false);
        jEditorPane_encrypted.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jEditorPane_encryptedKeyReleased(evt);
            }
        });
        jScrollPane3.setViewportView(jEditorPane_encrypted);

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 759, Short.MAX_VALUE)
                    .addComponent(jLabel5))
                .addContainerGap())
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE)
                .addContainerGap())
        );

        jPanel2.setBackground(java.awt.Color.darkGray);
        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Enter Keys", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Consolas", 1, 12), java.awt.Color.green)); // NOI18N

        jLabel3.setFont(new java.awt.Font("Consolas", 1, 12));
        jLabel3.setForeground(java.awt.Color.green);
        jLabel3.setText("INIT:");

        jTextField_init.setBackground(java.awt.Color.cyan);
        jTextField_init.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextField_initKeyReleased(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Consolas", 1, 12));
        jLabel1.setForeground(java.awt.Color.green);
        jLabel1.setText("Key:");

        jTextField_key.setBackground(java.awt.Color.cyan);
        jTextField_key.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextField_keyKeyReleased(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField_init, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField_key, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jTextField_init, jTextField_key});

        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jLabel3)
                .addComponent(jTextField_init, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jLabel1)
                .addComponent(jTextField_key, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        jPanel7.setBackground(java.awt.Color.darkGray);
        jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Select Mode:", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Consolas", 1, 12), java.awt.Color.green)); // NOI18N

        jRadioButton_encrypt.setBackground(java.awt.Color.darkGray);
        buttonGroup_mode.add(jRadioButton_encrypt);
        jRadioButton_encrypt.setForeground(java.awt.Color.cyan);
        jRadioButton_encrypt.setText("Encryption");
        jRadioButton_encrypt.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jRadioButton_encryptStateChanged(evt);
            }
        });
        jRadioButton_encrypt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton_encryptActionPerformed(evt);
            }
        });
        jRadioButton_encrypt.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                jRadioButton_encryptPropertyChange(evt);
            }
        });

        jRadioButton_decrypt.setBackground(java.awt.Color.darkGray);
        buttonGroup_mode.add(jRadioButton_decrypt);
        jRadioButton_decrypt.setForeground(java.awt.Color.cyan);
        jRadioButton_decrypt.setText("Decryption");
        jRadioButton_decrypt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton_decryptActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addComponent(jRadioButton_encrypt)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jRadioButton_decrypt)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jRadioButton_encrypt)
                    .addComponent(jRadioButton_decrypt))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanel8.setBackground(java.awt.Color.darkGray);
        jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Use Check Sum?", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Consolas", 1, 12), java.awt.Color.green)); // NOI18N

        jRadioButton_no.setBackground(java.awt.Color.darkGray);
        buttonGroup_checksum.add(jRadioButton_no);
        jRadioButton_no.setForeground(java.awt.Color.cyan);
        jRadioButton_no.setText("No");
        jRadioButton_no.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton_noActionPerformed(evt);
            }
        });

        jRadioButton_yes.setBackground(java.awt.Color.darkGray);
        buttonGroup_checksum.add(jRadioButton_yes);
        jRadioButton_yes.setForeground(java.awt.Color.cyan);
        jRadioButton_yes.setText("Yes");
        jRadioButton_yes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton_yesActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel8Layout.createSequentialGroup()
                .addContainerGap(10, Short.MAX_VALUE)
                .addComponent(jRadioButton_no)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jRadioButton_yes)
                .addContainerGap())
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jRadioButton_yes)
                    .addComponent(jRadioButton_no))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jTextField_checksum.setBackground(java.awt.Color.darkGray);
        jTextField_checksum.setEditable(false);
        jTextField_checksum.setFont(new java.awt.Font("Consolas", 0, 12));
        jTextField_checksum.setForeground(java.awt.Color.red);
        jTextField_checksum.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextField_checksum.setText("Inactive");
        jTextField_checksum.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Checksum Status", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Consolas", 1, 14), java.awt.Color.green)); // NOI18N

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel4, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField_checksum, javax.swing.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jPanel8, javax.swing.GroupLayout.Alignment.LEADING, 0, 47, Short.MAX_VALUE)
                        .addComponent(jPanel7, javax.swing.GroupLayout.Alignment.LEADING, 0, 47, Short.MAX_VALUE)
                        .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 47, Short.MAX_VALUE))
                    .addComponent(jTextField_checksum, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        jPanel3Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jPanel4, jPanel5});

        jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

        jTextPane_instructions.setBackground(new java.awt.Color(153, 153, 0));
        jTextPane_instructions.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Instructions", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Consolas", 1, 14), java.awt.Color.white)); // NOI18N
        jTextPane_instructions.setEditable(false);
        jTextPane_instructions.setFont(new java.awt.Font("Tahoma", 0, 12));
        jTextPane_instructions.setForeground(new java.awt.Color(255, 255, 255));
        jScrollPane1.setViewportView(jTextPane_instructions);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 795, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jMenuBar1.setBackground(new java.awt.Color(0, 255, 204));

        jMenu1.setText("File");

        jMenuItem1.setText("Open Encrypted File");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem1);

        jMenuItem2.setText("Save Encrypted File");
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem2ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem2);

        jMenuItem4.setText("Quit");
        jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem4ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem4);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Edit");

        jMenuItem3.setText("Clear All");
        jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem3ActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItem3);

        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// //GEN-END:initComponents

    private void jTextField_initKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField_initKeyReleased

        jTextField_init.setText(verify(jTextField_init.getText()));


        if (jTextField_init.getText().length() > 4) {
            jTextField_init.setText(jTextField_init.getText().substring(0, 4));
        }
        if (jTextField_init.getText().length() == 4 && jTextField_key.getText().length() == 4) {
            if (jEditorPane_plain != null || jEditorPane_encrypted != null) {
                set_mode();
            }
        }
    }//GEN-LAST:event_jTextField_initKeyReleased

    private void jTextField_keyKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField_keyKeyReleased
        jTextField_key.setText(verify(jTextField_key.getText()));
        if (jTextField_key.getText().length() > 4) {
            jTextField_key.setText(jTextField_key.getText().substring(0, 4));
        }
        if (jTextField_init.getText().length() == 4 && jTextField_key.getText().length() == 4) {
            if (jEditorPane_plain != null || jEditorPane_encrypted != null) {
                set_mode();
            }
        }


    }//GEN-LAST:event_jTextField_keyKeyReleased

    private void jRadioButton_encryptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton_encryptActionPerformed
        set_mode();
    }//GEN-LAST:event_jRadioButton_encryptActionPerformed

    private void jRadioButton_decryptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton_decryptActionPerformed
        //jButton_convert.setText("Decrypt");
        //jButton_convert.setEnabled(true);
        set_mode();
    }//GEN-LAST:event_jRadioButton_decryptActionPerformed

    private int Decrypt() {
        String out = new String();
        String message = "    Message:";
        String encrypted = "   Encrypted:";
        String key = "Subtract Key:";
        String result = "      Result:";
        String vigenere = "    Vigenere:";
        String end_result = "     Message: ";
        String plain = "  Plain Text:";
        String send = "   Encrypted:";

        encrypted_message = new String();
        decrypted_message = new String();

        char c_cipher[] = new char[150];
        char c_init[] = jTextField_init.getText().toCharArray();
        char c_key[] = jTextField_key.getText().toCharArray();
        int i_init[] = new int[4];
        int next_init[] = new int[4];
        int i_key[] = new int[4];

        for (int i = 0; i < 4; i++) {
            next_init[i] = Search(c_init[i]);
            i_key[i] = Search(c_key[i]);

        }


        encrypted_message = verify(jEditorPane_encrypted.getText());
        if (encrypted_message == null) {
            return -1;
        }

        c_cipher = encrypted_message.toCharArray();

        int size = encrypted_message.length();
        if (jRadioButton_yes.isSelected()) {
            size -= 4;
        }

        int counter = 0;
        int k = 0;
        for (int i = 0; i < size; i++) {

            int pos = Search(c_cipher[i]);

            //Store Init
            i_init[counter] = next_init[counter];
            next_init[counter] = pos;

            if (pos >= 0) {
                if (counter == 0) {
                    plain = plain.concat("\t[");
                    encrypted = encrypted.concat("\t[");
                    vigenere = vigenere.concat("\t[");
                    key = key.concat("\t[");
                    result = result.concat("\t[");
                    message = message.concat("\t[");
                    send = send.concat("\t[");
                    end_result = end_result.concat("\t[");
                }

                //Original Message
                plain = plain.concat(" " + MainFrame.cbc[pos]);
                encrypted = encrypted.concat(" " + pos);

                //Subtract Key
                key = key.concat(" " + i_key[counter % 4]);
                pos = (pos - i_key[counter % 4]) % 26;
                if (pos < 0) {
                    pos += 26;
                }
                result = result.concat(" " + pos);

                //Subtract Init
                vigenere = vigenere.concat(" " + i_init[counter % 4]);
                pos = (pos - i_init[counter % 4]) % 26;
                if (pos < 0) {
                    pos += 26;
                }
                end_result = end_result.concat(" " + pos);
                send = send.concat(" " + MainFrame.cbc[pos]);
                decrypted_message = decrypted_message.concat("" + MainFrame.cbc[pos]);

                counter++;
                if (counter == 4) {
                    plain = plain.concat("]");
                    message = message.concat("]");
                    //add = add.concat("]");
                    result = result.concat("]");
                    key = key.concat("]");
                    vigenere = vigenere.concat("]");
                    encrypted = encrypted.concat("]");
                    send = send.concat("]");
                    end_result = end_result.concat("]");
                    counter = 0;

                    k++;
                    if (k == 5) {
                        k = 0;
                        out = out.concat(plain + "\n" + encrypted + "\n" + key + "\n" + result + "\n" + vigenere + "\n" + end_result + "\n" + send + "\n\n");
                        message = "    Message:";
                        encrypted = "   Encrypted:";
                        key = "Subtract Key:";
                        result = "      Result:";
                        vigenere = "    Vigenere:";
                        end_result = "     Message: ";
                        plain = "  Plain Text:";
                        send = "   Encrypted:";
                    }
                }
            }
        }
        out = out.concat(plain + "\n" + encrypted + "\n" + key + "\n" + result + "\n" + vigenere + "\n" + end_result + "\n" + send + "\n\n");


        if (jRadioButton_yes.isSelected()) {
            char msg[] = encrypted_message.toCharArray();
            int i_checksum[] = new int[4];
            String s_checksum = "[";

            if (encrypted_message.length() > 4) {
                for (int i = 0; i < encrypted_message.length(); i++) {
                    i_checksum[i % 4] = (i_checksum[i % 4] + Search(msg[i])) % 26;
                }

                for (int i = 0; i < 4; i++) {
                    s_checksum = s_checksum.concat(" " + i_checksum[i]);
                }


                s_checksum = s_checksum.concat("]");
                if (i_checksum[0] == 0 && i_checksum[1] == 0 && i_checksum[2] == 0 && i_checksum[3] == 0) {
                    jTextField_checksum.setForeground(Color.green);
                    s_checksum = s_checksum.concat(" - Valid");
                } else {
                    jTextField_checksum.setForeground(Color.red);
                    s_checksum = s_checksum.concat(" - Invalid");
                }
                jTextField_checksum.setText(s_checksum);
            }
        }

        jEditorPane_plain.setText("" + out);
        jEditorPane_plain.setCaretPosition(0);
        return 0;
    }

    private int Encrypt() {
        String out = new String();
        String plain = "   Plain:";
        String message = "  Message:";
        String add = "      Add:";
        String result = "   Result:";
        String key = "      Key:";
        String vigenere = " Vigenere:";
        String encrypted = "Encrypted:";
        String send = "Encrypted:";

        encrypted_message = new String();
        decrypted_message = new String();

        char c_cipher[] = new char[150];
        char c_init[] = jTextField_init.getText().toCharArray();
        char c_key[] = jTextField_key.getText().toCharArray();
        int i_init[] = new int[4];
        int i_key[] = new int[4];


        try {
            for (int i = 0;
                    i < 4; i++) {
                i_init[i] = Search(c_init[i]);
                i_key[i] = Search(c_key[i]);

            }
        } catch (ArrayIndexOutOfBoundsException ex) {
            return -1;
        }


        //collect and verify input
        decrypted_message = verify(jEditorPane_plain.getText());
        if (decrypted_message == null) {
            return -1;
        }

        //add Zs to input
        while (decrypted_message.length() % 4 != 0) {
            decrypted_message = decrypted_message.concat("Z");
        }

        c_cipher = decrypted_message.toCharArray();

        int counter = 0;
        int k = 0;
        for (int i = 0; i < decrypted_message.length(); i++) {
            int pos = Search(c_cipher[i]);
            if (pos >= 0) {
                if (counter == 0) {
                    plain = plain.concat("\t[");
                    message = message.concat("\t[");
                    add = add.concat("\t[");
                    result = result.concat("\t[");
                    key = key.concat("\t[");
                    vigenere = vigenere.concat("\t[");
                    encrypted = encrypted.concat("\t[");
                    send = send.concat("\t[");
                }

                plain = plain.concat(" " + MainFrame.cbc[pos]);
                message = message.concat(" " + pos);

                add = add.concat(" " + i_init[counter % 4]);
                pos = (pos + i_init[counter % 4]) % 26;
                result = result.concat(" " + pos);


                key = key.concat(" " + i_key[counter % 4]);
                i_init[counter % 4] = pos = (pos + i_key[counter % 4]) % 26;
                vigenere = vigenere.concat(" " + pos);


                send = send.concat(" " + MainFrame.cbc[pos]);
                encrypted_message = encrypted_message.concat("" + MainFrame.cbc[pos]);

                counter++;
                if (counter == 4) {
                    plain = plain.concat("]");
                    message = message.concat("]");
                    add = add.concat("]");
                    result = result.concat("]");
                    key = key.concat("]");
                    vigenere = vigenere.concat("]");
                    encrypted = encrypted.concat("]");
                    send = send.concat("]");
                    counter = 0;

                    k++;
                    if (k == 5) {
                        out = out.concat(plain + "\n" + message + "\n" + add + "\n" + result + "\n" + key + "\n" + vigenere + "\n" + send + "\n\n");
                        k = 0;
                        plain = "    Plain:";
                        message = "  Message:";
                        add = "      Add:";
                        result = "   Result:";
                        key = "      Key:";
                        vigenere = " Vigenere:";
                        encrypted = "Encrypted:";
                        send = "Encrypted:";
                    }

                }

            }
        }

        out = out.concat(plain + "\n" + message + "\n" + add + "\n" + result + "\n" + key + "\n" + vigenere + "\n" + send);

        if (jRadioButton_yes.isSelected()) {
            char msg[] = encrypted_message.toCharArray();
            int i_checksum[] = {0, 0, 0, 0};
            String numbers = new String();
            String characters = new String();
            numbers = characters = "[";

            int pos = 0;
            for (int i = 0; i < encrypted_message.length(); i++) {
                char c = msg[i];
                int val = Search(c);
                if (val >= 0) {
                    i_checksum[pos % 4] = (i_checksum[pos % 4] + val) % 26;
                    pos++;
                }
            }
            for (int i = 0; i < 4; i++) {
                i_checksum[i] = (26 - i_checksum[i]) % 26;

                numbers = numbers.concat(" " + i_checksum[i]);

                Checksum = Checksum.concat("" + MainFrame.cbc[i_checksum[i]]);
                characters = characters.concat(" " + MainFrame.cbc[i_checksum[i]]);
                encrypted_message = encrypted_message.concat("" + MainFrame.cbc[i_checksum[i]]);
            }

            characters = characters.concat("]");
            numbers = numbers.concat("]");

            out = out.concat("\t" + characters);

            jTextField_checksum.setText(numbers);
        }

        jEditorPane_encrypted.setText(" " + out);
        jEditorPane_encrypted.setCaretPosition(0);
        return 0;
    }

    private void jEditorPane_plainKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jEditorPane_plainKeyReleased
        jEditorPane_plain.setText(jEditorPane_plain.getText().toUpperCase());
        Encrypt();

    }//GEN-LAST:event_jEditorPane_plainKeyReleased

    private void jEditorPane_encryptedKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jEditorPane_encryptedKeyReleased
        jEditorPane_encrypted.setText(jEditorPane_encrypted.getText().toUpperCase());
        Decrypt();

    }//GEN-LAST:event_jEditorPane_encryptedKeyReleased

    private void jRadioButton_encryptStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jRadioButton_encryptStateChanged
    }//GEN-LAST:event_jRadioButton_encryptStateChanged

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
        try {
            Open_File();
        } catch (IOException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_jMenuItem1ActionPerformed

    private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
        /**
         * Allows a user to (Save As) the contents of the Text Editor to a file.
         */
        File output;

        int option = jFileChooser.showSaveDialog(this);
        if (option == JFileChooser.APPROVE_OPTION) {
            if (jFileChooser.getSelectedFile() != null) {
                output = jFileChooser.getSelectedFile();
                //check if the file extension is correct
                if (!output.getName().endsWith(".txt")) {
                    output = new File(output.getAbsolutePath() + ".txt");
                }

                try {
                    BufferedWriter out = null;
                    out = new BufferedWriter(new FileWriter(output));
                    out.write(jTextField_key.getText() + " ");
                    out.write(jTextField_init.getText() + " ");
                    out.write(encrypted_message);


                    out.close();
                } catch (IOException ex) {
                    Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

    }//GEN-LAST:event_jMenuItem2ActionPerformed

    private void jRadioButton_encryptPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_jRadioButton_encryptPropertyChange
        set_mode();
    }//GEN-LAST:event_jRadioButton_encryptPropertyChange

    private void jRadioButton_yesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton_yesActionPerformed
        jTextField_checksum.setForeground(Color.green);
        jTextField_checksum.setText("Activated");
        set_mode();


    }//GEN-LAST:event_jRadioButton_yesActionPerformed

    private void jRadioButton_noActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton_noActionPerformed
        jTextField_checksum.setText("Inactive");
        jTextField_checksum.setForeground(Color.red);
        set_mode();

    }//GEN-LAST:event_jRadioButton_noActionPerformed

    private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed
        clear_all();
    }//GEN-LAST:event_jMenuItem3ActionPerformed

    private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed
        System.exit(0);
    }//GEN-LAST:event_jMenuItem4ActionPerformed

    /**
     * Attempts to open a file.
     */
    private int Open_File() throws IOException {
        int returnVal = jFileChooser.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            jRadioButton_decrypt.setSelected(true);


            File file = jFileChooser.getSelectedFile();



            FileReader input = new FileReader(file.getAbsolutePath());
            char t_init[] = new char[4];
            char t_key[] = new char[4];
            char text[] = new char[104];
            char foo[] = new char[1];
            String new_init = new String();
            String new_key = new String();
            String new_text = new String();


            input.read(t_key, 0, 4);
            input.read(foo, 0, 1);
            input.read(t_init, 0, 4);
            input.read(foo, 0, 1);
            input.read(text, 0, 104);
            int size = text.toString().length();

            String test;
            for (int i = 0; i < 4; i++) {
                test = verify("" + t_init[i]);
                if (test != null) {
                    new_init = new_init.concat(test);
                } else {
                    return -1;
                }
                test = verify("" + t_key[i]);
                if (test != null) {
                    new_key = new_key.concat(test);
                } else {
                    return -1;
                }
            }

            for (int i = 0; i < text.length; i++) {
                if (Search(text[i]) != -1) {
                    new_text = new_text.concat("" + text[i]);
                }
            }


            jTextField_init.setText(new_init.toString());
            jTextField_key.setText(new_key.toString());
            jEditorPane_encrypted.setText(new_text);
            encrypted_message = verify(new_text);

            set_mode();

        }
        return 0;
    }

    private void clear_all() {
        encrypted_message = decrypted_message = null;
        jEditorPane_encrypted.setText("");
        jEditorPane_plain.setText("");
        jTextField_init.setText("");
        jTextField_key.setText("");
        buttonGroup_checksum.clearSelection();
        buttonGroup_mode.clearSelection();
        jTextField_checksum.setText("Inactive");
        jTextField_init.requestFocusInWindow();
        set_mode();



    }

    void set_mode() {
        if (jRadioButton_encrypt.isSelected()) {
            jEditorPane_plain.setEnabled(true);
            jEditorPane_plain.setBackground(new Color(0, 204, 204));
            jEditorPane_encrypted.setEnabled(false);
            jEditorPane_encrypted.setBackground(Color.lightGray);
            jEditorPane_encrypted.setText("");

            try {
                jEditorPane_plain.setText(decrypted_message);
                Encrypt();
            } catch (NullPointerException e) {
                jEditorPane_plain.setText("");
            }
            jEditorPane_plain.requestFocusInWindow();
        } else if (jRadioButton_decrypt.isSelected()) {
            jEditorPane_encrypted.setBackground(new Color(0, 204, 204));
            jEditorPane_encrypted.setEnabled(true);
            jEditorPane_encrypted.setEditable(true);
            jEditorPane_plain.setEnabled(false);
            jEditorPane_plain.setBackground(Color.lightGray);
            jEditorPane_plain.setText("");
            try {
                jEditorPane_encrypted.setText(encrypted_message);
                Decrypt();
            } catch (NullPointerException e) {
                jEditorPane_encrypted.setText("");
            }
            jEditorPane_encrypted.requestFocusInWindow();
        } else {
            jEditorPane_encrypted.setBackground(Color.lightGray);
            jEditorPane_encrypted.setEnabled(false);
            jEditorPane_encrypted.setEditable(false);
            jEditorPane_plain.setEnabled(false);
            jEditorPane_plain.setBackground(Color.lightGray);
            jEditorPane_plain.setText("");
            jEditorPane_encrypted.setText("");
            jTextField_init.requestFocusInWindow();
        }

    }

    private String verify(String unverified) {
        unverified = unverified.toUpperCase();
        char data[] = unverified.toCharArray();
        for (int i = 0; i < unverified.length(); i++) {
            if (Search(data[i]) == -1) {

                //custom title, error icon

                String error_msg = "Input that is not alphanumeric has been detected.\n"
                        + "All input has been reset. Please verify your input.\n"
                        + "Valid input can be:\n"
                        + " A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n"
                        + " a b c d e f g h i j k l m n o p q r s t u v w x y z\n";

                JOptionPane.showMessageDialog(jDialog_error, error_msg,
                        "Invalid Input", JOptionPane.ERROR_MESSAGE);



                clear_all();
                return null;
            }
        }
        return unverified;
    }

    /**
     * @param args the command line arguments
     */
    private void initialize() {
        this.setVisible(true);


        this.init = new int[4];
        Checksum = new String();



        this.jRadioButton_no.setSelected(true);
        String instructions = new String();
        instructions = ("1.) Enter 4 letter (capital only) cipher (Init).\n"
                + "2.) Enter 4 letter (capital only) key.\n"
                + "3.) Select either encryption or decryption mode.\n"
                + "4.) Choose to use a checksum or not.\n"
                + "5.) Enter text to either encrypt or decrypt.\n");



        this.jTextPane_instructions.setText(instructions);


    }

    public static void main(String[] args) {
        MainFrame window = new MainFrame();
        window.initialize();




    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup buttonGroup_checksum;
    private javax.swing.ButtonGroup buttonGroup_mode;
    private javax.swing.JDialog jDialog_error;
    private javax.swing.JEditorPane jEditorPane_encrypted;
    private javax.swing.JEditorPane jEditorPane_plain;
    private javax.swing.JFileChooser jFileChooser;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private javax.swing.JMenuItem jMenuItem4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JRadioButton jRadioButton_decrypt;
    private javax.swing.JRadioButton jRadioButton_encrypt;
    private javax.swing.JRadioButton jRadioButton_no;
    private javax.swing.JRadioButton jRadioButton_yes;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane_plain;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField_checksum;
    private javax.swing.JTextField jTextField_init;
    private javax.swing.JTextField jTextField_key;
    private javax.swing.JTextPane jTextPane_instructions;
    // End of variables declaration//GEN-END:variables
}

[/java]
Welsh Rabbit
Creating a New Programming Project (C/C++)

Categorized Under

JavaProgramsSchoolwork

About Nick Guthrie

» has written 38 posts

Leave a Reply

You must be logged in to post a comment.

History