zoukankan      html  css  js  c++  java
  • 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;
    	}
    }
    


     

  • 相关阅读:
    bootstrap学习9-路径分页和徽章组件
    bootstrap学习8-输入框和导航栏组件
    bootstrap学习7-图标菜单和按钮组件
    bootstrap学习6-辅助类和响应工具
    bootstrap学习5-栅格系统
    bootstrap学习4-表单和图片
    bootstrap学习3-表格和按钮组件
    bootstrap学习笔记2
    相等操作符
    读《JavaScript dom编程艺术(第2版)》笔记 1-2
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3078685.html
Copyright © 2011-2022 走看看