desencdec.java

来自「这是一个轻便的j2ee的web应用框架,是一个在多个项目中运用的实际框架,采用s」· Java 代码 · 共 118 行

JAVA
118
字号
/*
 * Created on 2004-5-11
 *
 */
package com.esimple.service.crypto.cipher;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import com.esimple.service.crypto.util.BASE64Util;

/**
 * @author steven
 *
 */
public class DESEncdec implements Encdec {
	private static final String PADDING = "/ECB/PKCS5Padding";
	private static String defaultProvider = "SunJCE";
	private static final String algorithm = "DES";

	private String getProvider() {
//		defaultProvider =
//			System.getProperty("EOSCipherProvider", defaultProvider);
		return defaultProvider;
	}
	
	public String encrypt(String plaintext, SecretKey key){
		try {
			String spec = algorithm + PADDING;
			Cipher cipher = Cipher.getInstance(spec, getProvider());
			cipher.init(1, key);
			byte b[] = plaintext.getBytes("UTF8");
			byte cipherByteArray[] = cipher.doFinal(b);
			String ciphertext = BASE64Util.encode(cipherByteArray);
			return ciphertext;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;		
	}
	public String encrypt(String plaintext) {
		try {
			SecretKey key = getKey(null);
			return encrypt(plaintext,key);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	public String encrypt(
		String plaintext,
		String keyString) {
		try {
			SecretKey key = getKey(keyString);
			return encrypt(plaintext,key);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	public String decrypt(
		String ciphertext,
		SecretKey key) {
		try {
			String spec = algorithm + PADDING;
			Cipher cipher = Cipher.getInstance(spec, getProvider());
			cipher.init(2, key);
			byte decodebyte[] = BASE64Util.decodeBuffer(ciphertext);
			byte plaintext[] = cipher.doFinal(decodebyte);
			return new String(plaintext, "UTF8");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	public String decrypt(String ciphertext) {
		try {
			SecretKey key = getKey( null);
			return decrypt(ciphertext,key);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}	
	
	public String decrypt(
		String ciphertext,
		String keyString) {
		try {
			SecretKey key = getKey( keyString);
			return decrypt(ciphertext,key);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public SecretKey getKey(String keyString)throws Exception {
		SecretKey key = null;
		byte signedData[];
		if ( keyString == null) signedData = DefaultDESKey.BYTES_KEY;
		else signedData = keyString.getBytes();
		
		try {
			SecretKeySpec secrectKeySpec =
					new SecretKeySpec(signedData, algorithm);
			key = secrectKeySpec;
			if (key == null)
				throw new Exception("load secret key error.");
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
		return key;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?