欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java加解密工具类,支持RSA,AES,rsaaes,import java.

来源: javaer 分享于  点击 16605 次 点评:211

java加解密工具类,支持RSA,AES,rsaaes,import java.


import java.security.Key;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.spec.KeySpec;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import javax.crypto.spec.DESedeKeySpec;import javax.crypto.spec.SecretKeySpec;/** * 加解密统一接口,支持流行的对称和非对称算法 * 目前可以使用3DES,AES,RSA进行加解密 * @author luis.chen * @version $Id: EncryptUtil.java, v 0.1 2014年6月17日 上午11:08:28 luis.chen Exp $ */public class EncryptUtil {    public static void main(String args[]){        String plainText = "我是一只小小鸟";              try {            System.out.println("开始使用AES加密....");            //使用AES加密            byte[] asKey = getDefaultKey(EncryptAlgorithm.AES);            String encStr = testSymmEncry(plainText,asKey,EncryptAlgorithm.AES);            System.out.println("AES加密之后:"+encStr);            //使用AES解密            String decStr = testSymmDecry(encStr,asKey,EncryptAlgorithm.AES);            System.out.println("AES解密之后:"+decStr);            System.out.println("开始使用RSA加密....");            KeyPair kp = getDefaultKeyPair(EncryptAlgorithm.RSA);            String rsaEncStr = testAsymmEncry(plainText,kp.getPublic(),EncryptAlgorithm.RSAWithPadding);            System.out.println("RSA加密之后:"+rsaEncStr);            //使用RSA解密            String desDecStr = testAsymmDecry(rsaEncStr,kp.getPrivate(),EncryptAlgorithm.RSAWithPadding);            System.out.println("RSA解密之后:"+desDecStr);        } catch (Exception e) {            e.printStackTrace();        }    }    public static String testSymmEncry(String plainText,byte[] key,EncryptAlgorithm alg) throws Exception{        /*测试对称加密方法的应用场景类*/        byte[] encResult = encryt(EncryptStringUtils.getEncByteFromStr(plainText),key,alg);        String encStr = EncryptStringUtils.byte2hex(encResult);        return encStr;    }    public static String testAsymmEncry(String plainText,Key key,EncryptAlgorithm alg) throws Exception{        /*测试非对称加密方法的应用场景类*///        byte[] encResult = encryt(EncryptStringUtils.getEncByteFromStr(plainText),key,alg);        byte[] encResult = encryt(plainText.getBytes(),key,alg);        String encStr = EncryptStringUtils.byte2hex(encResult);        return encStr;    }    public static String testSymmDecry(String ciperText, byte[] key,EncryptAlgorithm alg) throws Exception{        /*测试解密方法的应用场景类*/        byte[] decResult = decryt(EncryptStringUtils.getDecByteFromStr(ciperText),key,alg);        String decStr = new String(decResult);        return decStr;    }    public static String testAsymmDecry(String ciperText, Key key,EncryptAlgorithm alg) throws Exception{        /*测试非对称解密方法的应用场景类*/        byte[] decResult = decryt(EncryptStringUtils.getDecByteFromStr(ciperText),key,alg);        String decStr = new String(decResult);        return decStr;    }    /**     * 对称加密方法     * @param plainText 明文的16进制字节数组     * @param encrytKey 16进制的密钥数组     * @param alg 加密算法的枚举     * @return 加密结果,返回加密后的字节数组     * @throws Exception     * */    public static byte[] encryt(byte[] plainText, byte[] encrytKey,EncryptAlgorithm alg) throws Exception{        Key k = toKey(encrytKey,alg);               return encryt(plainText,k,alg);    }    /**     * 非对称加密方法     * @param plainText 明文的16进制字节数组     * @param key 通过KeyPair获得的公钥     * @param alg 加密算法的枚举     * @return 加密结果,返回加密后的字节数组     * @throws Exception     * */    public static byte[] encryt(byte[] plainText, Key key,EncryptAlgorithm alg) throws Exception{        Cipher cipher = Cipher.getInstance(alg.getAlgorithm());        cipher.init(Cipher.ENCRYPT_MODE, key);        return cipher.doFinal(plainText);    }    /**     * 对称加密解密方法     * @param ciperText 密文的16进制字节数组     * @param decrytKey 16进制的密钥数组     * @param alg 加密算法的枚举     * @return 解密结果,返回解密后的字节数组     * @throws Exception     * */    public static byte[] decryt(byte[] ciperText, byte[] decrytKey,EncryptAlgorithm alg) throws Exception{        Key k = toKey(decrytKey,alg);        return decryt(ciperText,k,alg);    }    /**     * 非对称加密解密方法     * @param ciperText 密文的16进制字节数组     * @param key 通过keypair得到的非对称加密私钥     * @param alg 加密算法的枚举     * @return 解密结果,返回解密后的字节数组     * @throws Exception     * */    public static byte[] decryt(byte[] ciperText, Key key,EncryptAlgorithm alg) throws Exception{        Cipher cipher = Cipher.getInstance(alg.getAlgorithm());        cipher.init(Cipher.DECRYPT_MODE, key);        return cipher.doFinal(ciperText);    }    /**     * 获取对称加密算法算法的密钥     * @param alg 加密算法枚举     * @return 16进制的密钥数组     * @throws     * */    public static byte[] getDefaultKey(EncryptAlgorithm alg) throws Exception{        KeyGenerator keygen = KeyGenerator.getInstance(alg.getAlgorithm());               SecretKey deskey = keygen.generateKey();               return deskey.getEncoded();    }    /**     * 获取非对称加密算法的密钥     * @param alg 加密算法枚举     * @return 16进制的密钥数组     * @throws     * */    public static KeyPair getDefaultKeyPair(EncryptAlgorithm alg) throws Exception{        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(alg.getAlgorithm());        //密钥位数        keyPairGen.initialize(1024);        //密钥对        KeyPair keyPair = keyPairGen.generateKeyPair();        return keyPair;    }    /**     * 通过key的字节数组和特定的算法得到用于加解密的密钥对象     * @param key 密钥数组     * @param alg 加解密算法的枚举     * @return KEY     * @throws Exception     */    private static Key toKey(byte[] key, EncryptAlgorithm alg) throws Exception {        SecretKeySpec spec = new SecretKeySpec(key,alg.getAlgorithm());        if(alg.getAlgorithm().indexOf("DES") > -1 ){            KeySpec desKey = null;            SecretKeyFactory keyFactory = null;            if("DES".equals(alg.getAlgorithm())){                desKey = new DESKeySpec(key);                keyFactory = SecretKeyFactory.getInstance(alg.getAlgorithm());            }            else{                desKey = new DESedeKeySpec(key);                keyFactory = SecretKeyFactory.getInstance(EncryptAlgorithm.ThreeDES.getAlgorithm());             }// 将DESKeySpec对象转换成SecretKey对象             SecretKey securekey = keyFactory.generateSecret(desKey);             return securekey;        }        return spec;    }}
相关栏目:

用户点评