Java 加密整理

對加密使用的整理:java

1.須要導入jar包算法

'org.bouncycastle:bcprov-jdk16:1.46',
'commons-codec:commons-codec:1.9',

 

2.沒有找到對應的加密算法名稱,定義了算法名稱Enum:EncryptAlgorithmEnum.javaapache

/**
 * 
 */
package org.rico.commons.utils.encrypt;

/**
 * @author rico
 * 加密算法名稱enum
 */
public enum EncryptAlgorithmEnum {
	MD5("MD5"),
	SHA("SHA"),
	SHA1("SHA1"),
	SHA256("SHA256"),
	
	DSA("DSA"),
	RSA("RSA"),
	
	AES("AES"),
	DES("DES"),
	DESede("DESede");
	
	
	private String name;
	
	private EncryptAlgorithmEnum(String name) {
		this.name = name;
	}
	
	public String value() {
		return this.getName();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

3.加密工具類EncryptUtil.java安全

/**
 * 
 */
package org.rc.common.encrypt;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Security;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

/**
 * @author rico
 * md5加密工具 
 * message-digest algorithm 5 (信息-摘要算法),經常使用於文件校驗
 * 
 * SHA(Secure Hash Algorithm,安全散列算法)
 * 數字簽名等密碼學應用中重要的工具,被普遍地應用於電子商務等信息安全領域。
 * SHA與MD5經過碰撞法都被破解了,可是SHA仍然是公認的安全加密算法,較之MD5更爲安全
 * https://my.oschina.net/u/733161/blog/756814
 */
public class EncryptUtil {
	private static final String CHARSET_UTF8 = "UTF-8";
	
	static {
		//TODO add Provider
		// Adds a provider to the next position available. 
		Security.addProvider(new BouncyCastleProvider());
	}
	
	
	//============================================================================
	// 單向加密 MD5,SHA
	//============================================================================
	/**
	 * 單向加密
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static byte[] digest(String algorithm, String value) throws NoSuchAlgorithmException {
		if(StringUtils.isBlank(algorithm)) {
			throw new NullPointerException("algorithm is null.");
		}
		if(StringUtils.isBlank(value)) {
			throw new NullPointerException("digest value is null.");
		}
		
		MessageDigest digest = MessageDigest.getInstance(algorithm);
		digest.update(value.getBytes());
		
		return digest.digest();
	}
	
	/**
	 * 單向加密並轉換爲字符串格式
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static String digestToString(String algorithm, String value) throws NoSuchAlgorithmException {
		byte[] bytes = digest(algorithm, value);
		return Base64.encodeBase64String(bytes);
	}
	
	/**
	 * md5 加密
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static byte[] md5(String value) throws NoSuchAlgorithmException {
		return digest(EncryptAlgorithmEnum.MD5.value(), value);
	}
	
	/**
	 * md5加密並轉換爲字符串格式
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static String md5ToString(String value) throws NoSuchAlgorithmException {
		return digestToString(EncryptAlgorithmEnum.MD5.value(), value);
	}
	
	/**
	 * sha加密
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static byte[] sha(String value) throws NoSuchAlgorithmException {
		return digest(EncryptAlgorithmEnum.SHA.value(), value);
	}
	
	/**
	 * sha加密並轉換爲字符串格式
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static String shaToString(String value) throws NoSuchAlgorithmException {
		return digestToString(EncryptAlgorithmEnum.SHA.value(), value);
	}
	
	
	//===============================================================================
	// 對稱雙向加密AES,DES
	//===============================================================================
	/**
	 * 生成密鑰
	 * @param algorithm
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static SecretKey generateSecretKey(String algorithm) throws NoSuchAlgorithmException {
		if(StringUtils.isBlank(algorithm)) {
			throw new NullPointerException("algorithm name is null");
		}
		KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);
		return keyGenerator.generateKey();
	}
	
	/**
	 * 生成密鑰字符串
	 * @param algorithm
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static String generateSecretKeyString(String algorithm) throws NoSuchAlgorithmException {
		SecretKey secretKey = generateSecretKey(algorithm);
		return Base64.encodeBase64String(secretKey.getEncoded());
	}

	/**
	 * 生成AES密鑰
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static SecretKey aesKey() throws NoSuchAlgorithmException {
		return generateSecretKey(EncryptAlgorithmEnum.AES.value());
	}
	
	/**
	 * 生成AES密鑰字符串
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static String aesKeyString() throws NoSuchAlgorithmException {
		return generateSecretKeyString(EncryptAlgorithmEnum.AES.value());
	}
	
	/**
	 * 生成DES密鑰
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static SecretKey desKey() throws NoSuchAlgorithmException {
		return generateSecretKey(EncryptAlgorithmEnum.DES.value());
	}
	
	/**
	 * 生成DES密鑰字符串
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static String desKeyString() throws NoSuchAlgorithmException {
		return generateSecretKeyString(EncryptAlgorithmEnum.DES.value());
	}
	
	/**
	 * 解析SecretKey
	 * @param algorithm
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static SecretKey parseSecretKey(String algorithm, String value) throws NoSuchAlgorithmException {
		byte[] bytes = Base64.decodeBase64(value);
		return parseSecretKey(algorithm, bytes);
	}
	
	/**
	 * 解析SecretKey
	 * @param algorithm
	 * @param bytes
	 * @return
	 */
	public static SecretKey parseSecretKey(String algorithm, byte[] bytes) {
		SecretKey secretKey = new SecretKeySpec(bytes, 0, bytes.length, algorithm);
		return secretKey;
	}
	
	/**
	 * 解析 AES SecretKey
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static SecretKey parseAESSecretKey(String value) throws NoSuchAlgorithmException {
		return parseSecretKey(EncryptAlgorithmEnum.AES.value(), value);
	}
	public static SecretKey parseAESSecretKey(byte[] byets) throws NoSuchAlgorithmException {
		return parseSecretKey(EncryptAlgorithmEnum.AES.value(), byets);
	}
	
	/**
	 * 解析 DES SecretKey
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static SecretKey parseDESSecretKey(String value) throws NoSuchAlgorithmException {
		return parseSecretKey(EncryptAlgorithmEnum.DES.value(), value);
	}
	public static SecretKey parseDESSecretKey(byte[] bytes) throws NoSuchAlgorithmException {
		return parseSecretKey(EncryptAlgorithmEnum.DES.value(), bytes);
	}
	
	/**
	 * 對稱加密
	 * @param algorithm
	 * @param key
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws InvalidKeyException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 */
	public static byte[] encryptSymmetric(String algorithm, SecretKey key, String value) throws NoSuchAlgorithmException, 
			NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
		if(StringUtils.isBlank(algorithm)) {
			throw new NullPointerException("algorithm name is null");
		}
		if(StringUtils.isBlank(value)) {
			throw new NullPointerException("encrypt value is null");
		}
		
		Cipher cipher = Cipher.getInstance(algorithm);
		cipher.init(Cipher.ENCRYPT_MODE, key);
		return cipher.doFinal(value.getBytes());
	}
	public static String encryptSymmetricString(String algorithm, SecretKey key, String value) throws NoSuchAlgorithmException, 
			NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
		byte[] bytes = encryptSymmetric(algorithm, key, value);
		return Base64.encodeBase64String(bytes);
	}
	
	/**
	 * 對稱解密
	 * @param algorithm
	 * @param key
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws InvalidKeyException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] decryptSymmetric(String algorithm, SecretKey key, String value) throws NoSuchAlgorithmException, 
		NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		
		if(StringUtils.isBlank(algorithm)) {
			throw new NullPointerException("algorithm name is null");
		}
		if(StringUtils.isBlank(value)) {
			throw new NullPointerException("decrypt value is null");
		}
		
		Cipher cipher = Cipher.getInstance(algorithm);
		cipher.init(Cipher.DECRYPT_MODE, key);
		
		byte[] decodeBytes = Base64.decodeBase64(value);
		return cipher.doFinal(decodeBytes);
	}
	public static String decryptSymmetricString(String algorithm, SecretKey key, String value) throws NoSuchAlgorithmException,
			NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		byte[] bytes = decryptSymmetric(algorithm, key, value);
		return new String(bytes, CHARSET_UTF8);
	}
	
	/**
	 * DES對稱加密
	 * @param key
	 * @param value
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 */
	public static byte[] desEncrypt(SecretKey key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
		return encryptSymmetric(EncryptAlgorithmEnum.DES.value(), key, value);
	}
	public static String desEncryptString(SecretKey key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
		return encryptSymmetricString(EncryptAlgorithmEnum.DES.value(), key, value);
	}
	
	/**
	 * DES對稱解密
	 * @param key
	 * @param value
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static String desDecryptString(SecretKey key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return decryptSymmetricString(EncryptAlgorithmEnum.DES.value(), key, value);
	}
	public static byte[] desDecrypt(SecretKey key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return decryptSymmetric(EncryptAlgorithmEnum.DES.value(), key, value);
	}
	
	/**
	 * AES對稱加密
	 * @param key
	 * @param value
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 */
	public static byte[] aesEncrypt(SecretKey key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
		return encryptSymmetric(EncryptAlgorithmEnum.AES.value(), key, value);
	}
	public static String aesEncryptString(SecretKey key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
		return encryptSymmetricString(EncryptAlgorithmEnum.AES.value(), key, value);
	}
	
	/**
	 * AES對稱解密
	 * @param key
	 * @param value
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] aesDecrypt(SecretKey key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return decryptSymmetric(EncryptAlgorithmEnum.AES.value(), key, value);
	}
	public static String aesDecryptString(SecretKey key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return decryptSymmetricString(EncryptAlgorithmEnum.AES.value(), key, value);
	}
	
	
	//=================================================================================
	// 非對稱雙向加密RSA/DSA
	//===========================非對稱雙向加密=========================================
	/**
	 * 生成密鑰對
	 * @param algorithm
	 * @param keysize
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static KeyPair generateKeyPair(String algorithm, int keysize) throws NoSuchAlgorithmException {
		if(StringUtils.isBlank(algorithm)) {
			throw new NullPointerException("algorithm name is null");
		}
		if(keysize <= 0) {
			throw new IllegalArgumentException("keysize should be great than zero.");
		}
		
		KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
		keyPairGenerator.initialize(keysize);
		
		return keyPairGenerator.generateKeyPair();
	}
	
	/**
	 * 生成密鑰對
	 * @param algorithm
	 * @param keysize
	 * @param random
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static KeyPair generateKeyPair(String algorithm, int keysize, SecureRandom random) throws NoSuchAlgorithmException {
		if(StringUtils.isBlank(algorithm)) {
			throw new NullPointerException("algorithm name is null");
		}
		if(keysize <= 0) {
			throw new IllegalArgumentException("keysize should be great than zero.");
		}
		
		KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);
		keyPairGenerator.initialize(keysize, random);
		
		return keyPairGenerator.generateKeyPair();
	}
	
	/**
	 * 獲取RSA密鑰對
	 * @param keysize
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static KeyPair rsaKeyPair(int keysize) throws NoSuchAlgorithmException {
		return generateKeyPair(EncryptAlgorithmEnum.RSA.value(), keysize);
	}
	public static KeyPair rsaKeyPair(int keysize, SecureRandom random) throws NoSuchAlgorithmException {
		return generateKeyPair(EncryptAlgorithmEnum.RSA.value(), keysize, random);
	}
	
	/**
	 * 獲取DSA密鑰對
	 * @param keysize
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static KeyPair dsaKeyPair(int keysize) throws NoSuchAlgorithmException {
		return generateKeyPair(EncryptAlgorithmEnum.DSA.value(), keysize);
	}
	public static KeyPair dsaKeyPair(int keysize, SecureRandom random) throws NoSuchAlgorithmException {
		return generateKeyPair(EncryptAlgorithmEnum.DSA.value(), keysize, random);
	}
	
	public static String keyToString(Key key) {
		return Base64.encodeBase64String(key.getEncoded());
	}
	
	/**
	 * 非對稱加密
	 * @param algorithm
	 * @param key
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws InvalidKeyException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] encryptNonSymmetric(String algorithm, Key key, String value) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		if(StringUtils.isBlank(algorithm)) {
			throw new NullPointerException("algorithm name is null");
		}
		if(StringUtils.isBlank(value)) {
			throw new NullPointerException("encrypt value is null");
		}
		
		Cipher cipher = Cipher.getInstance(algorithm);
		cipher.init(Cipher.ENCRYPT_MODE, key);
		return cipher.doFinal(value.getBytes(CHARSET_UTF8));
	}
	public static String encryptNonSymmetricString(String algorithm, Key key, String value) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		byte[] bytes = encryptNonSymmetric(algorithm, key, value);
		return Base64.encodeBase64String(bytes);
	}
	
	/**
	 * 非對稱解密
	 * @param algorithm
	 * @param key
	 * @param value
	 * @return
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws InvalidKeyException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] decryptNonSymmetric(String algorithm, Key key, String value) throws NoSuchAlgorithmException, NoSuchPaddingException, 
			InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		if(StringUtils.isBlank(algorithm)) {
			throw new NullPointerException("algorithm name is null");
		}
		if(StringUtils.isBlank(value)) {
			throw new NullPointerException("decrypt value is null");
		}
		
		byte[] bytes = Base64.decodeBase64(value);
		Cipher cipher = Cipher.getInstance(algorithm);
		cipher.init(Cipher.DECRYPT_MODE, key);
		return cipher.doFinal(bytes);
	}
	public static String decryptNonSymmetricString(String algorithm, Key key, String value) throws NoSuchAlgorithmException, 
			NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		byte[] decryptBytes = decryptNonSymmetric(algorithm, key, value);
		return new String(decryptBytes, CHARSET_UTF8);
	}
	
	/**
	 * RSA加密
	 * @param key
	 * @param value
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] rsaEncrypt(Key key, String value) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, 
			IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return encryptNonSymmetric(EncryptAlgorithmEnum.RSA.value(), key, value);
	}
	public static String rsaEncryptString(Key key, String value) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, 
			IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return encryptNonSymmetricString(EncryptAlgorithmEnum.RSA.value(), key, value);
	}
	
	/**
	 * RSA解密
	 * @param key
	 * @param value
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] rsaDecrypt(Key key, String value) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, 
			IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return decryptNonSymmetric(EncryptAlgorithmEnum.RSA.value(), key, value);
	}
	public static String rsaDecryptString(Key key, String value) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, 
			IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return decryptNonSymmetricString(EncryptAlgorithmEnum.RSA.value(), key, value);
	}
	
	/**
	 * DSA加密
	 * @param key
	 * @param value
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] dsaEncrypt(Key key, String value) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, 
			IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return encryptNonSymmetric(EncryptAlgorithmEnum.DSA.value(), key, value);
	}
	public static String dsaEncryptString(Key key, String value) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, 
			IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return encryptNonSymmetricString(EncryptAlgorithmEnum.DSA.value(), key, value);
	}
	
	/**
	 * DSA解密
	 * @param algorithm
	 * @param key
	 * @param value
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws UnsupportedEncodingException
	 */
	public static byte[] dsaDecrypt(String algorithm, Key key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return decryptNonSymmetric(EncryptAlgorithmEnum.DSA.value(), key, value);
	}
	public static String dsaDecryptString(String algorithm, Key key, String value) throws InvalidKeyException, NoSuchAlgorithmException, 
			NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
		return decryptNonSymmetricString(EncryptAlgorithmEnum.DSA.value(), key, value);
	}
	
	/**
	 * 解析私鑰
	 * @param keyFactory
	 * @param keyValue
	 * @return
	 * @throws InvalidKeySpecException
	 */
	public static PrivateKey parsePrivateKey(KeyFactory keyFactory, byte[] bytes) throws InvalidKeySpecException {
		// Creates a new PKCS8EncodedKeySpec with the given encoded key.
		// PKCS8EncodedKeySpec represents the ASN.1 encoding of a private key, encoded according to the ASN.1 type PrivateKeyInfo. 
		PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
		PrivateKey key = (PrivateKey) keyFactory.generatePrivate(keySpec);
		
		return key;
	}
	public static PrivateKey parsePrivateKey(KeyFactory keyFactory, String keyValue) throws InvalidKeySpecException {
		return parsePrivateKey(keyFactory, Base64.decodeBase64(keyValue.getBytes()));
	}
	
	/**
	 * 解析私鑰(RSA)
	 * @param keyValue
	 * @return
	 * @throws InvalidKeySpecException
	 * @throws NoSuchAlgorithmException
	 */
	public static PrivateKey parseRSAPrivateKey(byte[] bytes) throws InvalidKeySpecException, NoSuchAlgorithmException {
		KeyFactory keyFactory = getKeyFactory(EncryptAlgorithmEnum.RSA.value());
		return parsePrivateKey(keyFactory, bytes);
	}
	public static PrivateKey parseRSAPrivateKey(String keyValue) throws InvalidKeySpecException, NoSuchAlgorithmException {
		KeyFactory keyFactory = getKeyFactory(EncryptAlgorithmEnum.RSA.value());
		return parsePrivateKey(keyFactory, keyValue);
	}
	
	/**
	 * 解析私鑰(DSA)
	 * @param keyValue
	 * @return
	 * @throws InvalidKeySpecException
	 * @throws NoSuchAlgorithmException
	 */
	public static PrivateKey parseDSAPrivateKey(byte[] bytes) throws InvalidKeySpecException, NoSuchAlgorithmException {
		KeyFactory keyFactory = getKeyFactory(EncryptAlgorithmEnum.DSA.value());
		return parsePrivateKey(keyFactory, bytes);
	}
	public static PrivateKey parseDSAPrivateKey(String keyValue) throws InvalidKeySpecException, NoSuchAlgorithmException {
		KeyFactory keyFactory = getKeyFactory(EncryptAlgorithmEnum.DSA.value());
		return parsePrivateKey(keyFactory, keyValue);
	}
	
	/**
	 * 解析公鑰
	 * @param keyFactory
	 * @param keyValue
	 * @return
	 * @throws InvalidKeySpecException
	 */
	public static PublicKey parsePublicKey(KeyFactory keyFactory, byte[] bytes) throws InvalidKeySpecException {
		// Creates a new X509EncodedKeySpec with the given encoded key.
		// X509EncodedKeySpec represents the ASN.1 encoding of a public key, encoded according to the ASN.1 type SubjectPublicKeyInfo. 
		X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);
		PublicKey key = keyFactory.generatePublic(keySpec);
		
		return key;
	}
	public static PublicKey parsePublicKey(KeyFactory keyFactory, String keyValue) throws InvalidKeySpecException {
		return parsePublicKey(keyFactory, Base64.decodeBase64(keyValue.getBytes()));
	}
	
	/**
	 * 解析公鑰(RSA)
	 * @param keyValue
	 * @return
	 * @throws InvalidKeySpecException
	 * @throws NoSuchAlgorithmException
	 */
	public static PublicKey parseRSAPublicKey(byte[] bytes) throws InvalidKeySpecException, NoSuchAlgorithmException {
		KeyFactory keyFactory = getKeyFactory(EncryptAlgorithmEnum.RSA.value());
		return parsePublicKey(keyFactory, bytes);
	}
	public static PublicKey parseRSAPublicKey(String keyValue) throws InvalidKeySpecException, NoSuchAlgorithmException {
		KeyFactory keyFactory = getKeyFactory(EncryptAlgorithmEnum.RSA.value());
		return parsePublicKey(keyFactory, keyValue);
	}
	
	/**
	 * 解析公鑰(DSA)
	 * @param keyValue
	 * @return
	 * @throws InvalidKeySpecException
	 * @throws NoSuchAlgorithmException
	 */
	public static PublicKey parseDSAPublicKey(byte[] bytes) throws InvalidKeySpecException, NoSuchAlgorithmException {
		KeyFactory keyFactory = getKeyFactory(EncryptAlgorithmEnum.DSA.value());
		return parsePublicKey(keyFactory, bytes);
	}
	public static PublicKey parseDSAPublicKey(String keyValue) throws InvalidKeySpecException, NoSuchAlgorithmException {
		KeyFactory keyFactory = getKeyFactory(EncryptAlgorithmEnum.DSA.value());
		return parsePublicKey(keyFactory, keyValue);
	}
	
	
	/**
	 * 獲取祕鑰工廠類
	 * @param algorithm
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static KeyFactory getKeyFactory(String algorithm) throws NoSuchAlgorithmException {		
		return KeyFactory.getInstance(algorithm);
	}
	
	/**
	 * 獲取祕鑰工廠類(RSA)
	 * @param algorithm
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static KeyFactory getRSAKeyFactory() throws NoSuchAlgorithmException {
		return getKeyFactory(EncryptAlgorithmEnum.RSA.value());
	}
	
	/**
	 * 獲取祕鑰工廠類(DSA)
	 * @param algorithm
	 * @return
	 * @throws NoSuchAlgorithmException
	 */
	public static KeyFactory getDSAKeyFactory() throws NoSuchAlgorithmException {
		return getKeyFactory(EncryptAlgorithmEnum.DSA.value());
	}
	
}

附:dom

http://blog.csdn.net/u013142781/article/details/50405648ide

http://blog.csdn.net/wildandfly/article/details/21521857工具

相關文章
相關標籤/搜索