zoukankan      html  css  js  c++  java
  • AES简单加密解密的方法实现

    package com.mstf.aes;
     
    import java.io.UnsupportedEncodingException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;
     
    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;
     
    /**
     * AES加密解密
     * @author ceet
     *
     */
    public class AESUntil {
    	/**
    	 * 加密
    	 * 
    	 *
    	 */
    	public static String Ecodes(String content, String key) {
    		if (content == null || content.length() < 1)
    			return null;
     
    		try {
    			KeyGenerator kgen = KeyGenerator.getInstance("AES");
    			kgen.init(128, new SecureRandom(key.getBytes()));
    			SecretKey secretKey = kgen.generateKey();
    			byte[] enCodeFormat = secretKey.getEncoded();
    			SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
    			Cipher cipher = Cipher.getInstance("AES");
    			byte[] byteContent = content.getBytes("utf-8");
    			cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
    			byte[] byteRresult = cipher.doFinal(byteContent);
    			StringBuffer sb = new StringBuffer();
    			for (int i = 0; i < byteRresult.length; i++) {
    				String hex = Integer.toHexString(byteRresult[i] & 0xFF);
    				if (hex.length() == 1) {
    					hex = '0' + hex;
    				}
    				sb.append(hex.toUpperCase());
    			}
    			return sb.toString();
    		} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    		} catch (NoSuchPaddingException e) {
    			e.printStackTrace();
    		} catch (InvalidKeyException e) {
    			e.printStackTrace();
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		} catch (IllegalBlockSizeException e) {
    			e.printStackTrace();
    		} catch (BadPaddingException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
     
    	/**
    	 * 解密
    	 * 
    	 * 
    	 */
    	public static String Dcodes(String content, String key) {
    		if (content == null || content.length() < 1)
    			return null;
     
    		if (content.trim().length() < 19)
    			return content;
     
    		byte[] byteRresult = new byte[content.length() / 2];
    		for (int i = 0; i < content.length() / 2; i++) {
    			int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
    			int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
    			byteRresult[i] = (byte) (high * 16 + low);
    		}
    		try {
    			KeyGenerator kgen = KeyGenerator.getInstance("AES");
    			kgen.init(128, new SecureRandom(key.getBytes()));
    			SecretKey secretKey = kgen.generateKey();
    			byte[] enCodeFormat = secretKey.getEncoded();
    			SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
    			Cipher cipher = Cipher.getInstance("AES");
    			cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
    			byte[] result = cipher.doFinal(byteRresult);
    			return new String(result);
    		} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    		} catch (NoSuchPaddingException e) {
    			e.printStackTrace();
    		} catch (InvalidKeyException e) {
    			e.printStackTrace();
    		} catch (IllegalBlockSizeException e) {
    			e.printStackTrace();
    		} catch (BadPaddingException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
     
    	/**
    	 * 详细解释
    	 * 【ceet为加密的密匙】
    	 * 【admin为需要加密的字符串】
    	 * 【67BE5ED967DBA9B9810C295BE6DEF5D5为解密后的字符串】
    	 * 【如果更改ceet,那么67BE5ED967DBA9B9810C295BE6DEF5D5字符串会发生变化】
    	 * @param args
    	 */
    	// 调用测试
    	public static void main(String[] args) {
    		System.out.println("需要加密的内容:"+Ecodes("admin", "ceet"));
    		System.out.println("经过解密的内容:"+Dcodes("67BE5ED967DBA9B9810C295BE6DEF5D5", "ceet"));
    	}
    }
    

      

  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/ceet/p/6985046.html
Copyright © 2011-2022 走看看