用java实现3des加密

import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
/**
 * 加密解密工具
 */
public class DesEncrypt {
	private Key key;
	private static final String KEY_ALGORITHM = "DESede";
	private static final String CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";
	
	/**
	 * 默认构造函数
	 */
	public DesEncrypt() {
		
	}
	/**
	 * 构造函数,初始化Key
	 * @param keyStore
	 */
	public DesEncrypt(String keyStore) {
		this.toKey(keyStore);
	}

	/**
	 * 初始化Key对象
	 * @param keyText
	 * @return
	 */
	public void toKey(String keyText) {
		DESedeKeySpec dks;
		SecretKeyFactory factory =null;
		if(check(keyText)){
			try {
				dks = new DESedeKeySpec(keyText.getBytes());
				factory= SecretKeyFactory.getInstance(KEY_ALGORITHM);
				this.key = factory.generateSecret(dks);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 
	 * @param 密钥keyText
	 * @return 校验密钥格式是否通过
	 */
	public boolean check(String keyText){
		boolean flag = false ;
		if(keyText!=null&&!"".equals(keyText.trim())){
			if(keyText.trim().length()>=24){
				flag = true ;
			}
		}
		return flag ;
		
	}
	
	/**
	 * 加密
	 * @param 明文 inputText
	 * @return 密文 outputText
	 */
	public String getEncString(String inputText) {
		Cipher cipher = null;
		String outputText = null ;
		try {
			cipher =Cipher.getInstance(CIPHER_ALGORITHM) ;
			cipher.init(Cipher.ENCRYPT_MODE, this.key) ;
			outputText= Base64.encode(cipher.doFinal(inputText.getBytes("UTF8")));
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			cipher= null;
		}
		return outputText;
	}


	/**
	 * 解密
	 * @param 密文 inputText
	 * @return 明文 outputText
	 */
	public String getDesString(String inputText) {
		Cipher cipher = null;
		String outputText = null ;
		try {
			cipher =Cipher.getInstance(CIPHER_ALGORITHM) ;
			cipher.init(Cipher.DECRYPT_MODE, this.key) ;
			outputText= new String(cipher.doFinal(Base64.decode(inputText)));
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			cipher= null;
		}
		return outputText;
	}

}


java在调用Base64后会自动换行,可添加replaceAll("\r","").replaceAll("\n","")

猜你喜欢

转载自yjandx.iteye.com/blog/1750648