| 
					
				 | 
			
			
				@ -0,0 +1,168 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.hospital.prescription.service.entrance.util; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.security.NoSuchAlgorithmException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.crypto.Cipher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.crypto.KeyGenerator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.crypto.SecretKey; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.crypto.spec.IvParameterSpec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.crypto.spec.SecretKeySpec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.utils.encode.Base64; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import sun.misc.BASE64Decoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import sun.misc.BASE64Encoder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class AES { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					public static String encrypt(String strKey, String strIn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							SecretKeySpec skeySpec = getKey(strKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							IvParameterSpec iv = new IvParameterSpec( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
									"0102030405060708".getBytes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							byte[] encrypted = cipher.doFinal(strIn.getBytes("UTF-8")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							return Base64.encode(encrypted); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					public static String decrypt(String strKey, String strIn) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							SecretKeySpec skeySpec = getKey(strKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							IvParameterSpec iv = new IvParameterSpec( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
									"0102030405060708".getBytes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							byte[] encrypted1 = Base64.decode(strIn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							byte[] original = cipher.doFinal(encrypted1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							String originalString = new String(original, "UTF-8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							return originalString; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					private static SecretKeySpec getKey(String strKey) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						byte[] arrBTmp = strKey.getBytes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						byte[] arrB = new byte[16]; // 创建一个空的16位字节数组(默认值为0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							arrB[i] = arrBTmp[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						SecretKeySpec skeySpec = new SecretKeySpec(arrB, "AES"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						return skeySpec; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					/**  
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 * 随机生成秘钥  
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 */   
			 | 
		
	
		
			
				 | 
				 | 
			
			
					public static void generateKey(){     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					    try {     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        KeyGenerator kg = KeyGenerator.getInstance("AES");     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        kg.init(128);//要生成多少位,只需要修改这里即可128, 192或256     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        SecretKey sk = kg.generateKey();     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        byte[] b = sk.getEncoded();     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        String s = byteToHexString(b);     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        System.out.println(s);     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        System.out.println("十六进制密钥长度为"+s.length());     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        System.out.println("二进制密钥的长度为"+s.length()*4);     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					    } catch (NoSuchAlgorithmException e) {     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        e.printStackTrace();     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					        System.out.println("没有此算法。");     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					    }     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					}  
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					/**  
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 * byte数组转化为16进制字符串  
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 * @param bytes  
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 * @return  
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 */   
			 | 
		
	
		
			
				 | 
				 | 
			
			
					public static String byteToHexString(byte[] bytes){        
			 | 
		
	
		
			
				 | 
				 | 
			
			
					    StringBuffer sb = new StringBuffer();        
			 | 
		
	
		
			
				 | 
				 | 
			
			
					    for (int i = 0; i < bytes.length; i++) {        
			 | 
		
	
		
			
				 | 
				 | 
			
			
					         String strHex=Integer.toHexString(bytes[i]);    
			 | 
		
	
		
			
				 | 
				 | 
			
			
					         if(strHex.length() > 3){        
			 | 
		
	
		
			
				 | 
				 | 
			
			
					                sb.append(strHex.substring(6));        
			 | 
		
	
		
			
				 | 
				 | 
			
			
					         } else {     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					              if(strHex.length() < 2){     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					                 sb.append("0" + strHex);     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					              } else {     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					                 sb.append(strHex);        
			 | 
		
	
		
			
				 | 
				 | 
			
			
					              }        
			 | 
		
	
		
			
				 | 
				 | 
			
			
					         }     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					    }     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					   return  sb.toString();        
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					public static String signConvertToPara(String region) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						String target = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						if (region != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							target = region.replaceAll("\\+", "%2B").replaceAll("\\ ", "%20") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
									.replaceAll("\\/", "%2F").replaceAll("\\?", "%3F") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
									.replaceAll("\\#", "%23").replaceAll("\\&", "%26") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
									.replaceAll("\\=", "%3D"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						return target; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					public static String paraConvertsign(String region) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						String target = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						if (region != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							target = region.replaceAll("%2B", "+").replaceAll("%20", " ") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
									.replaceAll("%2F", "/").replaceAll("%3F", "?") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
									.replaceAll("%25", "%").replaceAll("%23", "#") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
									.replaceAll("%26", "&").replaceAll("%3D", "="); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						return target; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					//用于和c#互通的加解密 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					//https://www.jianshu.com/p/9483c9ea3a04 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * AES的加密函数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param str 传入需要加密的字符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param key 传入一个16位长度的密钥。否则报错 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 执行成功返回加密结果,否则报错 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 抛出一个加密异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String aesEncrypt(String str, String key) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (str == null || key == null) return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        byte[] bytes = cipher.doFinal(str.getBytes("utf-8")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return new BASE64Encoder().encode(bytes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * AES的解密函数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param str 传入需要解密的字符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param key 传入一个16位长度的密钥。否则报错 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 执行成功返回加密结果,否则报错 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 抛出一个解密异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String aesDecrypt(String str, String key) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (str == null || key == null) return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        byte[] bytes = new BASE64Decoder().decodeBuffer(str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        bytes = cipher.doFinal(bytes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return new String(bytes, "utf-8"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     
			 | 
		
	
		
			
				 | 
				 | 
			
			
					public static void main(String[] args) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						generateKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						String testKey = "xmxzzxtj"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						String testEn = AES.encrypt(testKey, "{'function':'healthExam','yyid00':'220006','userId':'','name':'','phone':'','identityCard':'','icCard':''}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						System.out.println(testEn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						String testDe = AES.decrypt(testKey, testEn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						System.out.println(testDe); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |