import javax.swing.JOptionPane;
import java.util.Random;
import java.io.BufferedReader;
import java.io.FileReader;

public class KeywordCipherAnalysis {
    
    public KeywordCipherAnalysis() throws Exception {
        String keyString = "";
        String alphabet =  "abcdefghijklmnopqrstuvwxyz ";
        char[] alpha = alphabet.toCharArray();
        permute(alpha);
        for(int i = 0; i < alpha.length; i++ ) {
            keyString += alpha[i];
        } // end for
        while( true ) {
            String input = JOptionPane.showInputDialog("Enter Plaintext","the snow lay thick upon the ground so the meeting with me was cancelled");;
            if(input == null) return;
            input = input.toLowerCase();
            String encrypted = "";
            for( int i = 0; i < input.length(); i++ ) {
                char ch = input.charAt(i);
                if( !Character.isLetter(ch) ) ch = ' ';
                int index = alphabet.indexOf(ch);
                encrypted += keyString.charAt(index);
            } // end for
            JOptionPane.showMessageDialog(null,"Encrypted message is <" + encrypted + ">");
            int[] frequencies = new int[26];
            for( int i = 0; i < frequencies.length; i++ ) {
                frequencies	[i] = 0;
            } //end for
            for( int i = 0; i < encrypted.length(); i++ ) {
                char ch = encrypted.charAt(i);
                if( !Character.isLetter(ch) ) continue;
                frequencies[(int)ch - (int)'a']++;
            } // end for
            String out = "";
            for(int i = 0; i < frequencies.length; i++ ) {
                char ch = (char)(i + (int)'a');
                int index = keyString.indexOf(ch);
                out += ch  + "    " + frequencies[i] + "     " + alphabet.charAt(index)+ "\n";
            } // end for
            JOptionPane.showMessageDialog(null,out);
            String decrypted = "";
            for( int i = 0; i < encrypted.length(); i++ ) {
                int charInt = keyString.indexOf(encrypted.charAt(i));
                decrypted += alphabet.charAt(charInt);
            }// end for
            JOptionPane.showMessageDialog(null,"Decrypted message is <" + decrypted + ">");
        } // end while
    } // end constructor
    
    public static void main(String[] a) throws Exception {
        new KeywordCipherAnalysis();
    } // end main
    
    public final void permute(char[] chars) {
        Random r = new Random();
        for( int i = 1; i < chars.length; i++ ) {
            char ch = chars[i];
            int j = r.nextInt(i);
            chars[i] = chars[j];
            chars[j] = ch;
        } // end for
    } // end permute
    
} // end KeywordCipherAnalysis
