All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gdt.jgui.tool.JTextEncrypter Maven / Gradle / Ivy

package gdt.jgui.tool;
/*
 * Copyright 2016 Alexander Imas
 * This file is part of JEntigrator.

    JEntigrator is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    JEntigrator is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with JEntigrator.  If not, see .
 */

import gdt.data.entity.BaseHandler;
import gdt.data.grain.Locator;
import gdt.jgui.console.JConsoleHandler;
import gdt.jgui.console.JContext;
import gdt.jgui.console.JMainConsole;
import gdt.jgui.console.JRequester;
import gdt.jgui.entity.JEntityPrimaryMenu;

import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JTextArea;
import javax.swing.JPasswordField;
import javax.swing.SwingConstants;

import java.awt.Component;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.KeySpec;
import java.util.Properties;
import java.util.logging.Logger;

import javax.swing.border.TitledBorder;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

import org.apache.commons.codec.binary.Base64;
import org.eclipse.wb.swing.FocusTraversalOnArray;
/**
 * This class encrypt/decrypt text using the master password.
 * @author imasa
 *
 */
public class JTextEncrypter extends JPanel implements JContext{
	private static final long serialVersionUID = 1L;
	private JPasswordField passwordField;
	private JTextArea textArea;
	protected String text$;
	protected String title$="Text encoder";
	protected String subtitle$;
	protected JMainConsole console;
	private String requesterResponseLocator$;
	private JMenu menu;
	/**
	 * The default constructor.
	 */
	public JTextEncrypter() {
		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(null, "Master password", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		add(panel);
		panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
		JCheckBox chckbxNewCheckBox = new JCheckBox("Show");
		chckbxNewCheckBox.setHorizontalTextPosition(SwingConstants.LEFT);
		chckbxNewCheckBox.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() != ItemEvent.SELECTED) {
		           passwordField.setEchoChar('*');
		        } else {
		             passwordField.setEchoChar((char) 0);
		        }
			}
		});
		panel.add(chckbxNewCheckBox);
		panel.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{chckbxNewCheckBox, passwordField}));
		passwordField = new JPasswordField();
		passwordField.setMaximumSize(
			    new Dimension(Integer.MAX_VALUE,
			    		passwordField.getPreferredSize().height));
		panel.add(passwordField);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBorder(new TitledBorder(null, "Text", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		add(panel_1);
		panel_1.setLayout(new BorderLayout(0, 0));
		
		textArea = new JTextArea();
		textArea.setColumns(1);
		panel_1.add(textArea);
		
	}
	/**
	 * Get context menu.
	 * @return the context menu. 
	 */
	@Override
	public JMenu getContextMenu() {
		menu=new JMenu("Context");
		menu.addMenuListener(new MenuListener(){
			@Override
			public void menuSelected(MenuEvent e) {
				menu.removeAll();
				JMenuItem doneItem = new JMenuItem("Done");
				doneItem.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {
						if(requesterResponseLocator$!=null){
							try{
							   byte[] ba=Base64.decodeBase64(requesterResponseLocator$);
							   String responseLocator$=new String(ba,"UTF-8");
							   text$=textArea.getText();
							   responseLocator$=Locator.append(responseLocator$, JTextEditor.TEXT, text$);
							   //System.out.println("TextEditor:done:response locator="+responseLocator$);
							   JConsoleHandler.execute(console, responseLocator$);
								}catch(Exception ee){
									Logger.getLogger(JTextEncrypter.class.getName()).severe(ee.toString());
								}
						}else
						  console.back();
						
					}
				} );
				menu.add(doneItem);
				JMenuItem cancelItem = new JMenuItem("Cancel");
				cancelItem.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {
						console.back();
					}
				} );
				menu.add(cancelItem);
				char[] master=passwordField.getPassword();
//				System.out.println("Textencoder:context menu:master="+master.length);
				if(master.length>6){
				menu.addSeparator();
				JMenuItem encryptItem = new JMenuItem("Encrypt");
				encryptItem.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {
						char[] master=passwordField.getPassword();
						DesEncrypter desEncrypter = new DesEncrypter(master);
						String encrypted$ = desEncrypter.encrypt(textArea.getText());
                       textArea.setText(encrypted$);
					}
				} );
				
				menu.add(encryptItem);
				JMenuItem decryptItem = new JMenuItem("Decrypt");
				decryptItem.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {
						char[] master=passwordField.getPassword();
						DesEncrypter desEncrypter = new DesEncrypter(master);
						String decrypted$ = desEncrypter.decrypt(textArea.getText());
						 if(decrypted$!=null&&decrypted$.length()>0)
						textArea.setText(decrypted$);
					}
				} );
				menu.add(decryptItem);
				}
			}
			@Override
			public void menuDeselected(MenuEvent e) {
			}
			@Override
			public void menuCanceled(MenuEvent e) {
			}
		});
		return menu;
	}
	/**
	 * Get the panel to insert into the main console.
	 * @return the panel.
	 */
	@Override
	public JPanel getPanel() {
		return this;
	}
	/**
	 * Get the context locator.
	 * @return the context locator.
	 */
	@Override
	public String getLocator() {
		Properties locator=new Properties();
	    locator.setProperty(Locator.LOCATOR_TYPE, JContext.CONTEXT_TYPE);
	    locator.setProperty(JContext.CONTEXT_TYPE,getType());
	    text$=textArea.getText();
	    if(text$!=null){
	    	locator.setProperty(JTextEditor.TEXT,text$);
	    }
	    
	    if( requesterResponseLocator$!=null)
	    	locator.setProperty(JRequester.REQUESTER_RESPONSE_LOCATOR, requesterResponseLocator$);
	   locator.setProperty(BaseHandler.HANDLER_SCOPE,JConsoleHandler.CONSOLE_SCOPE);
	   locator.setProperty(BaseHandler.HANDLER_CLASS,JTextEncrypter.class.getName());
	   locator.setProperty(Locator.LOCATOR_ICON_CONTAINER,Locator.LOCATOR_ICON_CONTAINER_CLASS);
	   	locator.setProperty(Locator.LOCATOR_ICON_CLASS,JEntityPrimaryMenu.class.getName());
	   	locator.setProperty(Locator.LOCATOR_ICON_FILE,"lock.png"); 
	   return Locator.toString(locator);
	}
	/**
	 * Create the context.
	 * @param console the main console.
	 * @param locator$ the locator string.
	 * @return the procedure context.
	 */		
	@Override
	public JContext instantiate(JMainConsole console, String locator$) {
		this.console=console;
		try{
		Properties locator=Locator.toProperties(locator$);
		text$=locator.getProperty(JTextEditor.TEXT);
		subtitle$=locator.getProperty(JTextEditor.SUBTITLE);
		title$=locator.getProperty(JTextEditor.TEXT_TITLE);
    	 requesterResponseLocator$=locator.getProperty(JRequester.REQUESTER_RESPONSE_LOCATOR);
		textArea.setText(text$);
		}catch(Exception e){
			Logger.getLogger(getClass().getName()).severe(e.toString());
		}
		 return this;
	}
	@Override
	public String getTitle() {
		return title$;
	}
	/**
	 * Get context subtitle.
	 * @return the context subtitle.
	 */	
	@Override
	public String getSubtitle() {
			return subtitle$;
	}
	/**
	 * Get context type.
	 * @return the context type.
	 */	
	@Override
	public String getType() {
		return "Text encoder";
	}
	/**
	 * No action.
	 */
	@Override
	public void close() {
		// TODO Auto-generated method stub
		
	}
	 static class DesEncrypter {
        Cipher ecipher;
        Cipher dcipher;
        byte[] salt = {
                (byte) 0xA9, (byte) 0x9B, (byte) 0xC8, (byte) 0x32,
                (byte) 0x56, (byte) 0x35, (byte) 0xE3, (byte) 0x03
        };
        int iterationCount = 19;
        public DesEncrypter(char[] master) {
            try {
                KeySpec keySpec = new PBEKeySpec(master, salt, iterationCount);
                SecretKey key = SecretKeyFactory.getInstance(
                        "PBEWithMD5AndDES").generateSecret(keySpec);
                ecipher = Cipher.getInstance(key.getAlgorithm());
                dcipher = Cipher.getInstance(key.getAlgorithm());
                AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
                ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
                dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
            } catch (java.security.InvalidAlgorithmParameterException e) {
            } catch (java.security.spec.InvalidKeySpecException e) {
            } catch (javax.crypto.NoSuchPaddingException e) {
            } catch (java.security.NoSuchAlgorithmException e) {
            } catch (java.security.InvalidKeyException e) {
            }
        }

        public String encrypt(String str) {
            try {
                byte[] utf8 = str.getBytes("UTF8");
                byte[] enc = ecipher.doFinal(utf8);
                return Base64.encodeBase64String(enc);
            } catch (javax.crypto.BadPaddingException e) {
            } catch (IllegalBlockSizeException e) {
            } catch (java.io.IOException e) {
            }
            return null;
        }

        public String decrypt(String str) {
            try {
                byte[] dec =Base64.decodeBase64(str); 
                byte[] utf8 = dcipher.doFinal(dec);
                return new String(utf8, "UTF8");
            } catch (javax.crypto.BadPaddingException e) {
            } catch (IllegalBlockSizeException e) {
            } catch (java.io.IOException e) {
            }
            return null;
        }
    }
	@Override
	public void activate() {
		// TODO Auto-generated method stub
		
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy