| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
ew3y
10年前发布

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

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;      }                }