⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 .#fetionssomanager.java.1.6

📁 自己实现的AES和DES的加密算法。自己可以随意组成加密数据结构
💻 6
📖 第 1 页 / 共 3 页
字号:
			if (coressikey == null) {				
				return result;
			}
			int flag = coressikey.getFlag() & 8;
			int keyid = flag & 3;
			String key = "";
			int credenLevel = 0;  
			if (flag == 0) {
				credenLevel = 1;
			} else {
				credenLevel = 2; 
			}
			
			if (keyid == 0) {
				key = coressikey.getKey0();
			} else if (keyid == 1) {
				key = coressikey.getKey1();
			} else if (keyid == 2) {
				key = coressikey.getKey2();
			}
			
			String uri = request.getRequestURI();
			String clientip = request.getRemoteAddr();
			String corecreden = "";
			if (credenLevel == 1) {
				EncryptedByte encryptedbyte = new EncryptedByte();
				encryptedbyte.setUserType(Constant.USER_TYPE);
				encryptedbyte.setUserUri(uri);
				encryptedbyte.setDomain(coredomain);
				encryptedbyte.setUserIp(clientip);
				encryptedbyte.setUserMobileNo(String.valueOf(user.getMp()));
				encryptedbyte.setSignInTime(now.getTime());
				encryptedbyte.setSignInTimeOut(now.getTime() + Constant.SSO_COOKIE_MAXAGE);
				encryptedbyte.setUserSid(""+user.getFid());
				encryptedbyte.setUserStatus("" + user.getStatus());
				DES des = new DES();
				byte[] inBuff = des.data2Byte(encryptedbyte);
				byte[] outBuff = des.encryptByDES(inBuff, ByteConvert.getKeyByStr(key));
				
				byte[] bresult = new byte[outBuff.length + 5];
				bresult[0] = (byte)coressikey.getFlag().intValue();
				byte[] bet = ByteConvert.int2byte(Constant.SSO_COOKIE_MAXAGE);
				System.arraycopy(bet, 0, bresult, 1, bet.length);
				System.arraycopy(outBuff, 0, bresult, 5, outBuff.length);	
				
				corecreden = BASE64.getBASE64(bresult).replaceAll("\r", "").replaceAll("\n", "");
				
			} else if (credenLevel == 2) {
				EncryptedByteV2 datav2 = new EncryptedByteV2();
				datav2.setUserTypeV2(Constant.USER_TYPE_V2);
				datav2.setCreateTime(now.getTime());
				datav2.setExpireTime(now.getTime() + Constant.SSO_COOKIE_MAXAGE);
				datav2.setSid(user.getFid());
				datav2.setMobile(user.getMp());
				String logicPoolId = ""+user.getPoolid();
				datav2.setLogicalPoolId(Short.valueOf(logicPoolId));
				long lip = IpUtil.ipToLongValue(clientip);
				datav2.setUserIp(lip);
				datav2.setUserStatusV2(user.getStatus());
				datav2.setUserTypeV2((byte)0);
				byte[] inBuff = AES.encrypt(datav2.getByteV2(), key);
				
				byte[] bresult = new byte[inBuff.length + 5];
				bresult[0] = (byte)coressikey.getFlag().intValue();
				byte[] bet = ByteConvert.int2byte(Constant.SSO_COOKIE_MAXAGE);
				System.arraycopy(bet, 0, bresult, 1, bet.length);
				System.arraycopy(inBuff, 0, bresult, 5, inBuff.length);					
				
				corecreden = BASE64.getBASE64(bresult).replaceAll("\r", "").replaceAll("\n", "");
			}
			result = corecreden;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return result;
	}

	/**
	 * 取核心域数据
	 * @return CredenResult
	 */
//	private CredenResult getCoreEncryptedData() {
//		CredenResult result = new CredenResult();
//		result.setType("0");
//		try {
//			String ssoidkey = Constant.SSO_ID_KEY;
//			Cookie cookie = CookieUtils.findCookie(ssoidkey, request);
//			if (cookie == null) {
//				return result;
//			}			
//			String coredomain = Constant.SSO_SERVER_DOMAIN;
//			GcfgSsikeys coressikey = Constant.ssikeyMap.get(coredomain);
//			if (coressikey == null) {
//				LogUtil.logWrite(CommConstant.LOG_LEVEL_ERROR, "FetionSsoManager", 
//						"getEncryptedData", "", "GcfgSsikeys data error!", "", 
//						CommConstant.LOG_SORT_EXCEPTION);
//				return result;
//			}
//			
//			/* 解析核心域的Credentail */
//			String corecreden = cookie.getValue();
//			/* 去除"" */
//			if (corecreden.length() >= 2) {
//				char beginch = corecreden.charAt(0);
//				char endch = corecreden.charAt(corecreden.length() - 1);
//				if (beginch == '"' && endch == '"') {
//					corecreden = corecreden.substring(1, corecreden.length() - 1);
//				}
//			}			
//			byte[] bcorecreden = corecreden.getBytes();
//			
//			/* Flag = bCoreCredentail[0] 
//			 * bit3:1为第二类凭证,0为第一类凭证(bit "1000" = 8); 
//			 * bit0-bit1 key "11" = 3 */
//			int flag =  bcorecreden[0] & 8;
//			int keyid = bcorecreden[0] & 3;
//			String key = "";
//			int credenLevel = 0;  
//			if (flag == 0) {
//				credenLevel = 1;
//			} else {
//				credenLevel = 2; 
//			}
//			
//			if (keyid == 0) {
//				key = coressikey.getKey0();
//			} else if (keyid == 1) {
//				key = coressikey.getKey1();
//			} else if (keyid == 2) {
//				key = coressikey.getKey2();
//			} 
//
//			if (key == null || "".equals(key) || bcorecreden.length <= 5) {
//				return result;
//			}
//
//			byte[] bencrypted = new byte[bcorecreden.length - 5];
//			System.arraycopy(bcorecreden, 5, bencrypted, 0, bcorecreden.length - 5);
//			
//			/* 解析一类凭证,以及二类凭证 */
//			if (credenLevel == 1) {
//				DES des = new DES();
//				byte[] outBuff;
//				outBuff = des.decryptByDES(bencrypted, ByteConvert.getKeyByStr(key));
//				EncryptedData data = des.byte2date(outBuff);
//				if (data != null) {
//					result.setType("1");
//					result.setData(data);
//				}
//			} else if (credenLevel == 2) {
//				AES aes = new AES();
//				byte[] outBuff;
//				outBuff = AES.decrypt(bencrypted, key);
//				EncryptedDataV2 data = aes.byte2date(outBuff);
//				if (data != null) {
//					result.setType("2");
//					result.setData(data);
//				}				
//			}
//			if (!"0".equals(result.getType())) {
//				this.updCoreEncryptedData(result, coressikey);
//			}
//		} catch (Exception ex) {
//			ex.printStackTrace();
//		}
//		return result;
//	}
	
	/**
	 * 取核心域数据
	 * @return CredenResult
	 */
	public CredenResult getCoreEncryptedData(String corecreden, String type) {
		CredenResult result = new CredenResult();
		result.setType("0");
		try {
		
			String coredomain = Constant.SSO_SERVER_DOMAIN;
			GcfgSsikeys coressikey = Constant.ssikeyMap.get(coredomain);
			if(coressikey==null) {
				List<GcfgSsikeys> list = SpringHelper.getFetionSsoService().getSsikeysList();
				for (int i = 0; i<list.size(); i++) {
					coressikey = (GcfgSsikeys)list.get(i);
					if(coressikey.getDomain().equals(coredomain)) {
						break;
					}
				}
			}
			if (coressikey == null) {
				return result;
			}
			byte[] bcorecreden = BASE64.getFromBASE64(corecreden);
			/* Flag = bCoreCredentail[0] 
			 * bit3:1为第二类凭证,0为第一类凭证(bit "1000" = 8); 
			 * bit0-bit1 key "11" = 3 */
			int flag =  bcorecreden[0] & 8;
			int keyid = bcorecreden[0] & 3;
			String key = "";
			int credenLevel = 0;  
			if (flag == 0) {
				credenLevel = 1;
			} else {
				credenLevel = 2; 
			}
			if (keyid == 0) {
				key = coressikey.getKey0();
			} else if (keyid == 1) {
				key = coressikey.getKey1();
			} else if (keyid == 2) {
				key = coressikey.getKey2();
			} 

			if (key == null || "".equals(key) || bcorecreden.length <= 5) {
				return result;
			}
			byte[] bencrypted = new byte[bcorecreden.length - 5];
			
			System.arraycopy(bcorecreden, 5, bencrypted, 0, bcorecreden.length - 5);			
			
			/* 解析一类凭证,以及二类凭证 */
			if (credenLevel == 1) {
				DES des = new DES();
				byte[] outBuff = des.decryptByDES(bencrypted, ByteConvert.getKeyByStr(key));
				EncryptedData data = des.byte2date(outBuff);
				if (data != null) {
					result.setType("1");
					result.setData(data);
				}
			} else if (credenLevel == 2) {
				AES aes = new AES();
				byte[] outBuff;
				outBuff = AES.decrypt(bencrypted, key);
				EncryptedDataV2 data = aes.byte2date(outBuff);
				if (data != null) {
					result.setType("2");
					result.setData(data);
				}				
			}
			if (!"0".equals(result.getType())) {
				this.updCoreEncryptedData(result, coressikey);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return result;
	}
	/**
	 * 取核心域数据  AES解密
	 * @return CredenResult
	 */
	public CredenResult getCoreEncryptedDataByAES(String corecreden) {
		CredenResult result = new CredenResult();
		result.setType("0");
		try {
		
			String coredomain = Constant.SSO_SERVER_DOMAIN;
			GcfgSsikeys coressikey = Constant.ssikeyMap.get(coredomain);
			if(coressikey==null) {
				List<GcfgSsikeys> list = SpringHelper.getFetionSsoService().getSsikeysList();
				for (int i = 0; i<list.size(); i++) {
					coressikey = (GcfgSsikeys)list.get(i);
					if(coressikey.getDomain().equals(coredomain)) {
						break;
					}
				}
			}
			if (coressikey == null) {
				return result;
			}
			
			byte[] bcorecreden = BASE64.getFromBASE64(corecreden.replaceAll(" ", "+"));
			/* Flag = bCoreCredentail[0] 
			 * bit3:1为第二类凭证,0为第一类凭证(bit "1000" = 8); 
			 * bit0-bit1 key "11" = 3 */
			int flag =  bcorecreden[0] & 8;
			int keyid = bcorecreden[0] & 3;
			String key = "";
			int credenLevel = 0;  
			if (flag == 0) {
				credenLevel = 1;
			} else {
				credenLevel = 2; 
			}
			if (keyid == 0) {
				key = coressikey.getKey0();
			} else if (keyid == 1) {
				key = coressikey.getKey1();
			} else if (keyid == 2) {
				key = coressikey.getKey2();
			}
			if (key == null || "".equals(key) || bcorecreden.length <= 5) {
				return result;
			}
			byte[] bencrypted = new byte[bcorecreden.length - 5];
			
			System.arraycopy(bcorecreden, 5, bencrypted, 0, bcorecreden.length - 5);			
			credenLevel = 2;
			/* 解析一类凭证,以及二类凭证 */
			if (credenLevel == 1) {
				DES des = new DES();
				byte[] outBuff = des.decryptByDES(bencrypted, ByteConvert.getKeyByStr(key));
				EncryptedData data = des.byte2date(outBuff);
				if (data != null) {
					result.setType("1");
					result.setData(data);
				}
			} else if (credenLevel == 2) {
				AES aes = new AES();
				byte[] outBuff;
				outBuff = AES.decrypt(bencrypted, key);
				EncryptedDataV2 data = aes.byte2date(outBuff);
				if (data != null) {
					result.setType("2");
					result.setData(data);
				}				
			}
//			if (!"0".equals(result.getType())) {
//				this.updCoreEncryptedData(result, coressikey);
//			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return result;
	}
	
	/*    取新的过期时间      */
	private long getExpireTime() {
		long extime = 0;
		Calendar c = new GregorianCalendar();
        c.setTime (new Date());
        c.set(Calendar.MINUTE,c.get(Calendar.MINUTE)+Constant.EXTIME);
        extime = c.getTime().getTime();
		return extime;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -