/* * Copyright 2002-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.suren.autotest.web.framework.util; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Enumeration; import java.util.Properties; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import org.apache.commons.codec.binary.Base64; /** * 加解密工具类 * @author suren * @date 2016年12月24日 下午3:45:52 */ public class EncryptorUtil { public static final String ENCRYPT_FILE = "encrypt.properties"; public static final String ENCRYPT_KEY = "encrypt.key"; /** * @return 从配置文件中获取私钥 */ public static String getSecretKey() { ClassLoader clsLoader = EncryptorUtil.class.getClassLoader(); Enumeration<URL> urls = null; try { urls = clsLoader.getResources(ENCRYPT_FILE); } catch (IOException e1) { e1.printStackTrace(); } if(urls == null || !urls.hasMoreElements()) { throw new RuntimeException("Can not found encrypt.properties!"); } try(InputStream input = urls.nextElement().openStream()) { if(input == null) { throw new RuntimeException("Can not found encrypt.properties!"); } Properties encryptPro = new Properties(); encryptPro.load(input); if(!encryptPro.containsKey(ENCRYPT_KEY)) { throw new RuntimeException("Can not found " + ENCRYPT_KEY + " from encrypt.properties!"); } return encryptPro.getProperty(ENCRYPT_KEY); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 加密字符串 * @param plainText * @return */ public static String encrypt(String plainText) { try { return Encryptor.getInstance(Encryptor.ALG_DES, getSecretKey()).encryptStr(plainText); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } return plainText; } /** * 解密字符串 * @param encryptText * @return */ public static String decrypt(String encryptText) { try { return Encryptor.getInstance(Encryptor.ALG_DES, getSecretKey()).decryptStr(encryptText); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } return encryptText; } /** * 先加密后再进行Base64编码 * @param plainText * @return */ public static String encryptWithBase64(String plainText) { try { return Base64.encodeBase64String(Encryptor.getInstance(Encryptor.ALG_DES, getSecretKey()).encrypt(plainText)); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } return null; } /** * 先使用Base64解码然后解密 * @param base64Text * @return */ public static String decryptWithBase64(String base64Text) { byte[] encryptData = Base64.decodeBase64(base64Text); try { return Encryptor.getInstance(Encryptor.ALG_DES, getSecretKey()).decryptStr(encryptData); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } return base64Text; } }