Java--加密解密

package com.joye3g.ed;

public class Main {
	public static void main(String[] args) throws Exception {
//		initThreeDES();
//		initAES();
//		initRSA();
//		initMD5();
//		initSHA();
		initHMAC();
	}

	public static void initThreeDES(){
		ThreeDES des = new ThreeDES();        
		String msg = "安全编程技术_加密解密";      
		System.out.println("明文是" + msg);   
		byte[] enc = des.createEncryptor(msg);   
		System.out.println("密文是" + new String(enc));     
		byte[] dec = des.createDecryptor(enc);      
		System.out.println("解密后的结果是" + new String(dec)); 

	}
	
	public static void initAES(){
		AES aes = new AES();        
		String msg = "安全编程技术_加密解密";      
		System.out.println("明文是" + msg);   
		byte[] enc = aes.createEncryptor(msg);   
		System.out.println("密文是" + new String(enc));     
		byte[] dec = aes.createDecryptor(enc);      
		System.out.println("解密后的结果是" + new String(dec)); 
	}

	public static void initRSA(){
		RSA rsa = new RSA();
		String msg = "安全编程技术_加密解密";    
		System.out.println("明文是:" + msg);   
		//用公钥加密    
		byte[] srcBytes = msg.getBytes();    
		byte[] resultBytes = rsa.encrypt(srcBytes);    
		String result = new String(resultBytes);   
		System.out.println("用公钥加密后密文是:" + result);       
		//用私钥解密   
		byte[] decBytes = rsa.decrypt(resultBytes);    
		String dec = new String(decBytes);    
		System.out.println("用私钥解密后结果是:" + dec); 
	}

	public static void initMD5(){
		String msg = "安全编程技术_加密解密";    
		System.out.println("明文是" + msg);
		MD5 md5 = new MD5();   
		byte[] resultBytes = md5.encrypt(msg);   
		String result = new String(resultBytes);   
		System.out.println("密文是" + result);
	}

	public static void initSHA(){
		String msg = "安全编程技术_加密解密";    
		System.out.println("明文是" + msg);
		SHA sha = new SHA();   
		byte[] resultBytes = sha.encrypt(msg);   
		String result = new String(resultBytes);   
		System.out.println("密文是" + result);
	}

	public static void initHMAC(){
		//要计算消息验证码的字符串   
		String str="安全编程技术_加密解密";  
		System.out.println("明文是:" + str);  
		HMAC hmac = new HMAC();
		byte[] certifyCode = hmac.createEncryptor(str);
		System.out.println("密文是:" + new String(certifyCode));
	}
}


AES:

package com.joye3g.ed;

import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class AES {
	// KeyGenerator提供对称密钥生成器的功能,支持各种算法
	private KeyGenerator keyGenerator;
	// SecretKey负责保存对称密钥
	private SecretKey secretKey;
	// Cipher负责完成加密或解密工作
	private Cipher cipher;
	// 该字节数组负责保存加密的结果
	private byte[] cipherByte;

	@SuppressWarnings("restriction")
	public AES() {
		Security.addProvider(new com.sun.crypto.provider.SunJCE());
		// 实例化支持AES算法的密钥生成器,算法名称用AES
		try {
			keyGenerator = KeyGenerator.getInstance("AES");
			// 生成密钥
			secretKey = keyGenerator.generateKey();
			// 生成Cipher对象,指定其支持AES算法
			cipher = Cipher.getInstance("AES");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		}
	}

	/* 对字符串str加密 */
	public byte[] createEncryptor(String str) {
		try {
			// 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
			cipher.init(Cipher.ENCRYPT_MODE, secretKey);
			byte[] src = str.getBytes();
			// 将加密结果保存进cipherByte
			cipherByte = cipher.doFinal(src);
		} catch (java.security.InvalidKeyException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.BadPaddingException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.IllegalBlockSizeException ex) {
			ex.printStackTrace();
		}
		return cipherByte;
	}

	/* 对字节数组buff解密 */
	public byte[] createDecryptor(byte[] buff) {
		try {
			// 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示解密模式
			cipher.init(Cipher.DECRYPT_MODE, secretKey);
			// 将得到明文存入cipherByte字符数组
			cipherByte = cipher.doFinal(buff);
		} catch (java.security.InvalidKeyException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.BadPaddingException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.IllegalBlockSizeException ex) {
			ex.printStackTrace();
		}
		return cipherByte;
	}
}


DES:

package com.joye3g.ed;

import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class DES {
	// KeyGenerator提供对称密钥生成器的功能,支持各种算法
	private KeyGenerator keyGenerator;
	// SecretKey负责保存对称密钥
	private SecretKey secretKey;
	// Cipher负责完成加密或解密工作
	private Cipher cipher;
	// 该字节数组负责保存加密的结果
	private byte[] cipherByte;

	@SuppressWarnings("restriction")
	public DES() {
		Security.addProvider(new com.sun.crypto.provider.SunJCE());
		try {
			// 实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)
			keyGenerator = KeyGenerator.getInstance("DES");
			// 生成密钥
			secretKey = keyGenerator.generateKey();
			// 生成Cipher对象,指定其支持DES算法
			cipher = Cipher.getInstance("DES");
		} catch (NoSuchAlgorithmException ex) {
			ex.printStackTrace();
		} catch (NoSuchPaddingException ex) {
			ex.printStackTrace();
		}
	}

	/* 对字符串str加密 */
	public byte[] createEncryptor(String str) {
		try {
			// 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
			cipher.init(Cipher.ENCRYPT_MODE, secretKey);
			byte[] src = str.getBytes();
			// 将加密结果保存进cipherByte
			cipherByte = cipher.doFinal(src);
		} catch (java.security.InvalidKeyException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.BadPaddingException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.IllegalBlockSizeException ex) {
			ex.printStackTrace();
		}
		return cipherByte;
	}

	/* 对字节数组buff解密 */
	public byte[] createDecryptor(byte[] buff) {
		try {
			// 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示解密模式
			cipher.init(Cipher.DECRYPT_MODE, secretKey);
			// 将得到的明文存入cipherByte字符数组
			cipherByte = cipher.doFinal(buff);
		} catch (java.security.InvalidKeyException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.BadPaddingException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.IllegalBlockSizeException ex) {
			ex.printStackTrace();
		}
		return cipherByte;
	}
}


HMAC:

package com.joye3g.ed;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class HMAC {
	
	private Mac mac;
	
	public HMAC() {
		try {
			// 用DES算法得到计算验证码的密钥
			KeyGenerator keyGen = KeyGenerator.getInstance("DESede");
			SecretKey key = keyGen.generateKey();
			byte[] keyByte = key.getEncoded();
			// 生成MAC对象
			SecretKeySpec SKS = new SecretKeySpec(keyByte, "HMACMD5");
			mac = Mac.getInstance("HMACMD5");
			mac.init(SKS);
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
	}

	public byte[] createEncryptor(String str) {
		// 传入要计算验证码的字符串
		byte[] certifyCode = null;
		try {
			mac.update(str.getBytes("UTF8"));
			// 计算验证码
			certifyCode = mac.doFinal();
			return certifyCode;
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return null;
	}

}


MD5:

package com.joye3g.ed;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
	private MessageDigest md5;

	public MD5() {
		//根据MD5算法生成MessageDigest对象   
		try {
			md5 = MessageDigest.getInstance("MD5");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}   
	}

	// MD5加密 
	public byte[] encrypt(String msg) {  
		byte[] srcBytes = msg.getBytes();  
		//使用srcBytes更新摘要   
		md5.update(srcBytes);    
		//完成哈希计算,得到并返回密文  
		return md5.digest();  
	}
}


RSA:

package com.joye3g.ed;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;

public class RSA {
	private RSAPrivateKey privateKey;
	private RSAPublicKey publicKey;
	private Cipher cipher;

	public RSA() {
		try {
			// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
			KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
			// 初始化密钥对生成器,密钥大小为1024位
			keyPairGen.initialize(1024);
			// 生成一个密钥对保存在keyPair中
			KeyPair keyPair = keyPairGen.generateKeyPair();
			// 得到私钥
			privateKey = (RSAPrivateKey) keyPair.getPrivate();
			// 得到公钥
			publicKey = (RSAPublicKey) keyPair.getPublic();
			// 根据私钥对Cipher对象进行初始化
			cipher = Cipher.getInstance("RSA");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		}
	}

	/* 对srcBytes加密 */
	public byte[] encrypt(byte[] srcBytes) {
		if (publicKey != null) {
			try {
				// 根据公钥,对Cipher对象进行初始化
				cipher.init(Cipher.ENCRYPT_MODE, publicKey);
				// 将加密结果保存进resultBytes
				byte[] resultBytes = cipher.doFinal(srcBytes);
				return resultBytes;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	/* 对encBytes解密 */
	public byte[] decrypt(byte[] encBytes) {
		if (privateKey != null) {
			try {
				cipher.init(Cipher.DECRYPT_MODE, privateKey);
				// 将解密结果保存进resultBytes
				byte[] decBytes = cipher.doFinal(encBytes);
				return decBytes;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}
}


SHA:

package com.joye3g.ed;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA {
	private MessageDigest md5;
	public SHA() {
		//根据MD5算法生成MessageDigest对象   
		try {
			md5 = MessageDigest.getInstance("MD5");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}   
	}

	// MD5加密 
	public byte[] encrypt(String msg) {  
		byte[] srcBytes = msg.getBytes();  
		//使用srcBytes更新摘要   
		md5.update(srcBytes);    
		//完成哈希计算,得到并返回密文  
		return md5.digest();  
	}
}


3DES:

package com.joye3g.ed;

import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class ThreeDES {
	// KeyGenerator提供对称密钥生成器的功能,支持各种算法
	private KeyGenerator keyGenerator;
	// SecretKey负责保存对称密钥
	private SecretKey secretKey;
	// Cipher负责完成加密或解密工作
	private Cipher cipher;
	// 该字节数组负责保存加密的结果
	private byte[] cipherByte;

	@SuppressWarnings("restriction")
	public ThreeDES() {
		Security.addProvider(new com.sun.crypto.provider.SunJCE());
		// 实例化支持3DES算法的密钥生成器,算法名称用DESede
		try {
			keyGenerator = KeyGenerator.getInstance("DESede");
			// 生成密钥
			secretKey = keyGenerator.generateKey();
			// 生成Cipher对象,指定其支持3DES算法
			cipher = Cipher.getInstance("DESede");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		}
	}

	/* 对字符串str加密 */
	public byte[] createEncryptor(String str) {
		try {
			// 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
			cipher.init(Cipher.ENCRYPT_MODE, secretKey);
			byte[] src = str.getBytes();
			// 将加密结果保存进cipherByte
			cipherByte = cipher.doFinal(src);
		} catch (java.security.InvalidKeyException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.BadPaddingException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.IllegalBlockSizeException ex) {
			ex.printStackTrace();
		}
		return cipherByte;
	}

	/* 对字节数组buff解密 */
	public byte[] createDecryptor(byte[] buff) {
		try {
			// 根据密钥对Cipher对象进行初始化,ENCRYPT_MODE表示解密模式
			cipher.init(Cipher.DECRYPT_MODE, secretKey);
			// 将得到明文存入cipherByte字符数组
			cipherByte = cipher.doFinal(buff);
		} catch (java.security.InvalidKeyException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.BadPaddingException ex) {
			ex.printStackTrace();
		} catch (javax.crypto.IllegalBlockSizeException ex) {
			ex.printStackTrace();
		}
		return cipherByte;
	}
}


 

 

posted @ 2013-05-14 21:32  javawebsoa  Views(307)  Comments(0Edit  收藏  举报