Java加密解密器

今天用Java类里自带的编码解码做了 一个加密解密器。其实我没做什么就是做了个界面。

还有key是固定八个字符,我改成不是八个字符也可以了。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Encrypt extends JFrame{

	private static final long serialVersionUID = 1L;
	JLabel lb1 = new JLabel("原文:");
	JTextArea txt = new JTextArea(8,35);
	JScrollPane jsTxt = new JScrollPane(txt);
	JLabel lb = new JLabel("KEY:");
	JTextField pwd = new JTextField(10);
	JButton encry = new JButton("加密");
	JButton decry = new JButton("解密");
	JLabel lb2 = new JLabel("加/解密后:");
	JTextArea showArea = new JTextArea(8,35);
	JScrollPane jsShowArea = new JScrollPane(showArea);
	public Encrypt(String title) throws HeadlessException {
		super(title);
	}
	public static void main(String[] args) {
		new Encrypt("Encrypt").start();
	}
	public void start(){
		JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
		JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
		JPanel rightPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		JPanel downPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
		BorderLayout layout = new BorderLayout(5,5);
		this.setLayout(layout);
		this.setSize(400, 395);
		topPanel.add(lb1);
		topPanel.add(jsTxt);
		this.add("North", topPanel);
		leftPanel.add(lb);
		leftPanel.add(pwd);
		this.add("West", leftPanel);
		rightPanel.add(encry);
		encry.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if(txt.getText().length()==0){
					JOptionPane.showMessageDialog(null, "加密内容不能为空", "提示", JOptionPane.INFORMATION_MESSAGE);
					return ;
				}
				showArea.setText(encrypt(txt.getText(),pwd.getText()));
			}
		});
		rightPanel.add(decry);
		decry.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if(txt.getText().length()==0){
					JOptionPane.showMessageDialog(null, "解密内容不能为空", "提示", JOptionPane.INFORMATION_MESSAGE);
					return ;
				}
				showArea.setText(decrypt(txt.getText(),pwd.getText()));
			}
		});
		this.add("East", rightPanel);
		downPanel.add(lb2);
		downPanel.add(jsShowArea);
		this.add("South", downPanel);
		this.setResizable(false);
		this.setVisible(true);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	  /**
     * 加密逻辑方法
     * @param message
     * @param key
     * @return
     * @throws Exception
     */
    private static byte[] encryptProcess(String message, String key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
        return cipher.doFinal(message.getBytes("UTF-8"));
    }

    /**
     * 解密逻辑方法
     * @param message
     * @param key
     * @return
     * @throws Exception
     */
    private static String decryptProcess(String message,String key) throws Exception {
            byte[] bytesrc =convertHexString(message);
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));
            cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
            byte[] retByte = cipher.doFinal(bytesrc);
            return new String(retByte);
    }

    /**
     * 16进制数组数转化
     * @param ss
     * @return
     */
    private static byte[] convertHexString(String ss) throws Exception {
        byte digest[] = new byte[ss.length() / 2];
        for(int i = 0; i < digest.length; i++)
        {
	        String byteString = ss.substring(2 * i, 2 * i + 2);
	        int byteValue = Integer.parseInt(byteString, 16);
	        digest[i] = (byte)byteValue;
        }
        return digest;
    }

    /**
     * 十六进制数转化
     * @param b
     * @return
     * @throws Exception
     */
    private static String toHexString(byte b[]) throws Exception {
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            String plainText = Integer.toHexString(0xff & b[i]);
            if (plainText.length() < 2)
                plainText = "0" + plainText;
            hexString.append(plainText);
        } 

        return hexString.toString();
    }

    private static String fixKey(String key){
    	if(key.length()>8){
        	key = key.substring(0, 8);
        }else{
        	while(key.length()<8){
        		key+='0';
        	}
        }
    	return key;
    }
    /**
     * 加密方法
     */
    public static String encrypt(String message,String key){
        String enStr = null;
        if(key.length()!=8){
        	key = fixKey(key);
        }
        System.out.println(key+"......"+key.length());
        try {
             String orignStr=java.net.URLEncoder.encode(message, "utf-8");
             enStr=toHexString(encryptProcess(orignStr, key));
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "加密参数异常!", "错误", JOptionPane.OK_OPTION);
        }
        return enStr;
    }

    /**
     * 解密方法
     */
    public static String decrypt(String message,String key){
        String decStr = null;
        if(key.length()!=8){
        	key = fixKey(key);
        }
        System.out.println(key+"......"+key.length());
        try {
            decStr = java.net.URLDecoder.decode(decryptProcess(message,key), "utf-8") ;
        }catch (Exception e) {
        	JOptionPane.showMessageDialog(null, "解密参数异常!", "错误", JOptionPane.OK_OPTION);
        }
        return decStr;
    }
}

经过测试。确实可以加解密。

时间: 2024-10-13 09:15:17

Java加密解密器的相关文章

java加密MD5,DES

des,可以直接拿过去用的,,,不用深入了解算法的整个过程 package com.hotel.EncryptionAndDecryption; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.security.InvalidKeyException; import java.s

des加密解密——java加密,php解密

最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混杂,好不容易测试在php这边测试加密和解密成功了.为确保安卓app端提交过来的加密参数能够解密出来,给定安卓人员一个字符串,让他们把des加密后的字符串给我,在php这边解密.结果一看,加密出来的字符串跟我这边加密出来的结果不一致,自然是解密不出来. 要来java的des算法代码,研究加密的过程,其

Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

[前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及用法和样例 [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao.正确应该是miyue,可是大家都读miyao) 2.简单的样例 将123456每位数字都加1后得到234567, 当中123456就是明文.234567就是密文.加密密钥就是1,加密算法是每位加 3.对称加密和非对称加密 以上为例. 123456-->234567的加密

java加密解密算法位运算

一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算会把加密后的字符串还原为原有字符串的值.效果图如下: 二.实现过程 1 package com.itxxz; 2 3 import java.util.Scanner; 4 5 /** 6 * java加密解密算法 7 * 8 * @author 螃蟹 9 * 网站:IT学习者 10 * 网址:ht

java加密基础(一) —— BASE64编码

工作之后第一次接触到java加密机制,当时需求是使用RSA做数字签名.当时看到之后一脸懵逼,就查了各种资料. 对于学习过程中我走了不少弯路,主要是因为不知道先看什么在看什么.下面说一下我的学习经历 首先,要了解BASE64算法,因为java加密基本上都用到了BASE64:然后就是对称加密和非对称加密了(下一章节着重介绍,这里就不多做描述了):最后就是了解下数字签名(会在第三章节中介绍到) 我们都知道ASCII字符一共有256,而计算机记录数据的方式只有0.1,所以就只能使用8bit才能表示一个A

Java加密解密字符串

http://www.cnblogs.com/vwpolo/archive/2012/07/18/2597232.html Java加密解密字符串 旧文重发:http://www.blogjava.net/vwpolo/archive/2009/12/05/304874.html#383365 import java.security.Key; import java.security.Security; import javax.crypto.Cipher; /** * DES加密和解密工具,

Java加密技术(十)——单向认证

在 Java 加密技术(九)中,我们使用自签名证书完成了认证.接下来,我们使用第三方CA签名机构完成证书签名. 这里我们使用 thawte提供的测试用21天免费ca证书. 1.要在该网站上注明你的域名,这里使用 www.zlex.org作为测试用域名(请勿使用该域名作为你的域名地址,该域名受法律保护!请使用其他非注册域名!). 2.如果域名有效,你会收到邮件要求你访问 https://www.thawte.com/cgi/server/try.exe获得ca证书. 3.复述密钥库的创建. She

Java加密技术(一)——BASE64与单向加密算法MD5&amp;SHA&amp;MAC

http://snowolf.iteye.com/blog/379860 加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了.     言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) H

Java加密解密与数字证书的操作

1 keytool命令总结 一.创建数字证书 交互模式 使用默认的密钥库.keystore(文件夹是c: Documents and Settingusername)和算法(DSA) keytool -genkey 默认的别名mykey 密钥库中能够存放多个条目(公钥/私钥对和证书),它们在密钥库中以别名(alias)区分. [plain] view plaincopy keytool -genkey -alias mytest -keyalg RSA -keysize 1024 -keysto