常用加密 以及解密方法(包含测试方法) DES Base64 AES

来源:互联网 发布:中行外汇行情分析软件 编辑:程序博客网 时间:2024/06/07 02:01

这个加密算法在我们实际工作中经常需要用到,所以小编在课余时间学习了一下,简单写了一个测试类,当然,实际开发中我们需要使用随机数产生key,还有在登录中加密都需要使用传输加密等等,这里面代码都有注释,简单易懂

package com.yinkailong.cems.utils;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;/**  *   <B>说       明</B>:AEC加密解密工具 * * @author  作  者  名:xxx<br/> *          E-mail :miaohongbo@vrvmail.com.cn * @version 版   本  号:V1.0.<br/> *          创建时间:2016年3月23日 下午12:24:39 */@SuppressWarnings("restriction")public class AecUtil{    /**     * 加密  DES  Base64   AES   秘钥     * @param password 待加密密码     * @param key key值     * @return     * @throws Exception     */    public static String encrypt(String password , String key) throws Exception {        try {            String iv = key;            //创建秘钥器            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");            //得到密码的字节数   dataBytes字符串转化为字节数组            byte[] dataBytes = password.getBytes();            //得到plaintextLength 的长度            int plaintextLength = dataBytes.length;             //创建一个数组  长度为 plaintextLength            byte[] plaintext = new byte[plaintextLength];            System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);             //生成秘钥   使用AES加密算法            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());              //初始化            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);            //将加密后的   密码加密后的字节数组      便于存储       正式执行加密算法            byte[] encrypted = cipher.doFinal(plaintext);             //在进行Base64进行加密            return new sun.misc.BASE64Encoder().encode(encrypted);        } catch (Exception e) {            e.printStackTrace();            return null;        }    }     /**      * 解密      * @param password 待解密密码      * @param key key值      * @return      * @throws Exception      */    public static String desEncrypt(String password , String key) throws Exception {        try{            String iv = key;            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(password);            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);            byte[] original = cipher.doFinal(encrypted1);            String originalString = new String(original);            return originalString;        }        catch (Exception e) {            e.printStackTrace();            return null;        }    }    public static void main(String args[]) throws Exception {        String data = "123456";        String key = "1234567812345678";        //调用该算法进行加密        String s=encrypt(data , key);        System.out.println(s);        //使用该秘钥进行解密        System.out.println(desEncrypt(s,key));    }}