Проблема с использованием методов затмения WindowBuilder и JCA-JCE - PullRequest
0 голосов
/ 08 марта 2019

Я сам делаю независимый проект о сообщении шифрования / дешифрования, используя JCA-JCE и WindowBuilder в качестве графического интерфейса.

Моя проблема в том, что шифр должен зашифровать сообщение и преобразовать его в зашифрованный текст, это исключение появляется каждый раз

javax.crypto.IllegalBlockSizeException: длина ввода не кратна 16 байтам

Сначала я пробую без графического интерфейса, и все прошло нормально

сейчас я покажу вам код, но, пожалуйста, не будьте грубым со мной из-за путаницы в коде, лол, это просто "прототип"

Спасибо всем, кто может мне помочь

    import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.swing.JButton;
import javax.swing.JComboBox;
import java.awt.event.ActionListener;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.awt.event.ActionEvent;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.swing.JButton;
import javax.swing.JComboBox;
import java.awt.event.ActionListener;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.awt.event.ActionEvent;

public class GUI2 extends JFrame {

    private JPanel contentPane;
    private JTextField txtInsert;


    static Cipher ecipher;
    static SecretKey key;
    static byte[] mex;
    static String alg;
    int index;
    static byte[] ciphertext;
    String uno=new String("k");
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    GUI2 frame = new GUI2();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     * @throws UnsupportedEncodingException 
     */
    public GUI2() throws UnsupportedEncodingException {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 602, 408);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblInserisciTesto = new JLabel("Inserisci Testo");
        lblInserisciTesto.setBounds(29, 33, 190, 14);
        contentPane.add(lblInserisciTesto);

        /////////////////TEXTFIELD////////////////
        txtInsert = new JTextField();
        mex=uno.getBytes("UTF-8");
        txtInsert.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            try {
                mex=txtInsert.getText().getBytes("UTF-8");
            } catch (UnsupportedEncodingException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            }
        });{
        txtInsert.setText("INSERT");
        txtInsert.setBounds(276, 30, 284, 20);
        contentPane.add(txtInsert);
        txtInsert.setColumns(10);


        }


        ///////////////LABEL SELEZIONA ALGORITMO/////////////
        JLabel lblSelezionaAlgoritmo = new JLabel("Seleziona Algoritmo");
        lblSelezionaAlgoritmo.setBounds(29, 109, 104, 14);
        contentPane.add(lblSelezionaAlgoritmo); 





        ///////////////BUTTON//////////////////////////////
        JButton btnCrypt = new JButton("CRYPT");{
        btnCrypt.setBounds(223, 316, 89, 23);
        contentPane.add(btnCrypt);


        btnCrypt.addActionListener(new ActionListener() {     /////ACTION
            public void actionPerformed(ActionEvent e) {
                if((index>=0)&&(index<4)) {
                try {
                    SecureRandom random=new SecureRandom();
                    KeyGenerator keygen=KeyGenerator.getInstance("AES");
                    keygen.init(256,random);
                    key=keygen.generateKey();
                    ecipher=Cipher.getInstance(alg);
                    ecipher.init(Cipher.ENCRYPT_MODE,key);
                    ciphertext = ecipher.doFinal(mex);
                    System.out.println(ciphertext);

                } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException  e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

                }else if((index>=4)&&(index<7)) {

                }

            }
        });
        }
        //////////////COMBOBOX//////////////////
        JComboBox comboBox = new JComboBox();
        comboBox.setBounds(276, 105, 284, 22);

        String a=new String("AES/CBC/NoPadding");
        String b=new String("AES/CBC/PKCS5Padding");
        String c=new String("AES/ECB/NoPadding");
        String d=new String("AES/ECB/PKCS5Padding");
        String f=new String("DES/CBC/PKCS5Padding");
        String g=new String("DES/ECB/NoPadding");
        String h=new String("DES/ECB/PKCS5Padding");

        comboBox.addItem(a);
        comboBox.addItem(b);
        comboBox.addItem(c);
        comboBox.addItem(d);
        comboBox.addItem(f);
        comboBox.addItem(g);
        comboBox.addItem(h);
        contentPane.add(comboBox);

        comboBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                alg=(String) comboBox.getSelectedItem();
                index=comboBox.getSelectedIndex();
            }
        });{


        }




        JLabel lblCiphertext = new JLabel("CipherText");
        lblCiphertext.setBounds(29, 204, 104, 14);
        contentPane.add(lblCiphertext);

        JLabel lblNewLabel = new JLabel("New label");
        lblNewLabel.setBounds(276, 195, 284, 23);
        contentPane.add(lblNewLabel);
    }
}

1 Ответ

0 голосов
/ 08 марта 2019

У вас есть этот список:

    String a=new String("AES/CBC/NoPadding");
    String b=new String("AES/CBC/PKCS5Padding");
    String c=new String("AES/ECB/NoPadding");
    String d=new String("AES/ECB/PKCS5Padding");
    String f=new String("DES/CBC/PKCS5Padding");
    String g=new String("DES/ECB/NoPadding");
    String h=new String("DES/ECB/PKCS5Padding");

Если вы используете шифр с NoPadding, вам необходимо предоставить данные, соответствующие размеру блока шифровального шифра.Если вы укажете заполнение, провайдер позаботится о том, чтобы ваши данные были заполнены правильно, и, таким образом, вы избежите javax.crypto.IllegalBlockSizeException

...