Ver Fonte

encrypt

zhourui há 5 anos atrás
pai
commit
4284722f5f

+ 65 - 63
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/Crypto.java

@@ -1,12 +1,9 @@
 package com.x.base.core.project.tools;
 
 import java.io.ByteArrayOutputStream;
-import java.io.IOException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
-import java.security.InvalidKeyException;
 import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
 import java.security.PrivateKey;
 import java.security.PublicKey;
 import java.security.SecureRandom;
@@ -15,16 +12,11 @@ import java.security.spec.X509EncodedKeySpec;
 import java.util.Objects;
 import java.util.regex.Matcher;
 
-import javax.crypto.BadPaddingException;
 import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
 import javax.crypto.SecretKey;
 import javax.crypto.SecretKeyFactory;
 import javax.crypto.spec.DESKeySpec;
-import javax.crypto.spec.SecretKeySpec;
 import javax.script.ScriptContext;
-import javax.script.ScriptException;
 import javax.script.SimpleScriptContext;
 
 import org.apache.commons.codec.binary.Base64;
@@ -36,12 +28,17 @@ import com.x.base.core.project.script.ScriptFactory;
 
 public class Crypto {
 
+	private Crypto() {
+	}
+
 	private static final String utf8 = "UTF-8";
 
 	private static final String DES = "DES";
 
 	private static final String RSA = "RSA";
 
+	private static final String KEY = "HANGZHOU";
+
 	public static String encrypt(String data, String key) throws Exception {
 		byte[] bt = encrypt(data.getBytes(), key.getBytes());
 		String str = Base64.encodeBase64URLSafeString(bt);
@@ -129,60 +126,59 @@ public class Crypto {
 	public static final String TEST_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWcVZIS57VeOUzi8c01WKvwJK9uRe6hrGTUYmF6J/pI6/UvCbdBWCoErbzsBZOElOH8Sqal3vsNMVLjPYClfoDyYDaUlakP3ldfnXJzAFJVVubF53KadG+fwnh9ZMvxdh7VXVqRL3IQBDwGgzX4rmSK+qkUJjc3OkrNJPB7LLD8QIDAQAB";
 	public static final String TEST_PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJZxVkhLntV45TOLxzTVYq/Akr25F7qGsZNRiYXon+kjr9S8Jt0FYKgStvOwFk4SU4fxKpqXe+w0xUuM9gKV+gPJgNpSVqQ/eV1+dcnMAUlVW5sXncpp0b5/CeH1ky/F2HtVdWpEvchAEPAaDNfiuZIr6qRQmNzc6Ss0k8HsssPxAgMBAAECgYAWtRy05NUgm5Lc6Og0jVDL/mEnydxPBy2ectwzHh2k7wIHNi8XhUxFki2TMqzrM9Dv3/LySpMl4AE3mhs34LNPy6F+MwyF5X7j+2Y6MflJyeb9HNyT++viysQneoOEiOk3ghxF2/GPjpiEF79wSp+1YKTxRAyq7ypV3t35fGOOEQJBANLDPWl8b5c3lrcz/dTamMjHbVamEyX43yzQOphzkhYsz4pruATzTxU+z8/zPdEqHcWWV39CP3xu3EYNcAhxJW8CQQC2u7PF5Xb1xYRCsmIPssFxil64vvdUadSxl7GLAgjQ9ULyYWB24KObCEzLnPcT8Pf2Q0YQOixxa/78FuzmgbyfAkA7ZFFV/H7lugB6t+f7p24OhkRFep9CwBMD6dnZRBgSr6X8d8ZvfrD2Z7DgBMeSva+OEoOtlNmXExZ3lynO9zN5AkAVczEmIMp3DSl6XtAuAZC9kD2QODJ2QToLYsAfjiyUwsWKCC43piTuVOoW2KUUPSwOR1VZIEsJQWEcHGDQqhgHAkAeZ7a6dVRZFdBwKA0ADjYCufAW2cIYiVDQBJpgB+kiLQflusNOCBK0FT3lg8BdUSy2D253Ih6l3lbaM/4M7DFQ";
 
-	private static final String KEY_AES = "AES";
-
-	public static String aesEncrypt(String src) throws NoSuchAlgorithmException, NoSuchPaddingException,
-			InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
-		byte[] raw = "hangzhouzhejiang".getBytes();
-		SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES);
-		Cipher cipher = Cipher.getInstance(KEY_AES);
-		cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
-		byte[] encrypted = cipher.doFinal(src.getBytes());
-		return byte2hex(encrypted);
-	}
-
-	public static String aesDecrypt(String src) throws NoSuchAlgorithmException, NoSuchPaddingException,
-			InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
-		byte[] raw = "hangzhouzhejiang".getBytes();
-		SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES);
-		Cipher cipher = Cipher.getInstance(KEY_AES);
-		cipher.init(Cipher.DECRYPT_MODE, skeySpec);
-		byte[] encrypted1 = hex2byte(src);
-		byte[] original = cipher.doFinal(encrypted1);
-		return new String(original);
-	}
-
-	public static byte[] hex2byte(String strhex) {
-		if (strhex == null) {
-			return new byte[0];
-		}
-		int l = strhex.length();
-		if (l % 2 == 1) {
-			return new byte[0];
-		}
-		byte[] b = new byte[l / 2];
-		for (int i = 0; i != l / 2; i++) {
-			b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2), 16);
-		}
-		return b;
-	}
-
-	public static String byte2hex(byte[] b) {
-		StringBuilder sb = new StringBuilder();
-		String tmp = "";
-		for (int n = 0; n < b.length; n++) {
-			tmp = (Integer.toHexString(b[n] & 0XFF));
-			if (tmp.length() == 1) {
-				sb.append("0" + tmp);
-			} else {
-				sb.append(tmp);
-			}
-		}
-		return sb.toString().toUpperCase();
-	}
-
-	public static String plainTextPassword(String text) throws ScriptException, InvalidKeyException,
-			NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
+//	private static final String KEY_AES = "AES";
+//
+//	public static String aesEncrypt(String src) throws NoSuchAlgorithmException, NoSuchPaddingException,
+//			InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
+//		byte[] raw = "hangzhouzhejiang".getBytes();
+//		SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES);
+//		Cipher cipher = Cipher.getInstance(KEY_AES);
+//		cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
+//		byte[] encrypted = cipher.doFinal(src.getBytes());
+//		return byte2hex(encrypted);
+//	}
+//
+//	public static String aesDecrypt(String src) throws NoSuchAlgorithmException, NoSuchPaddingException,
+//			InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
+//		byte[] raw = "hangzhouzhejiang".getBytes();
+//		SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES);
+//		Cipher cipher = Cipher.getInstance(KEY_AES);
+//		cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+//		byte[] encrypted1 = hex2byte(src);
+//		byte[] original = cipher.doFinal(encrypted1);
+//		return new String(original);
+//	}
+//
+//	public static byte[] hex2byte(String strhex) {
+//		if (strhex == null) {
+//			return new byte[0];
+//		}
+//		int l = strhex.length();
+//		if (l % 2 == 1) {
+//			return new byte[0];
+//		}
+//		byte[] b = new byte[l / 2];
+//		for (int i = 0; i != l / 2; i++) {
+//			b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2), 16);
+//		}
+//		return b;
+//	}
+//
+//	public static String byte2hex(byte[] b) {
+//		StringBuilder sb = new StringBuilder();
+//		String tmp = "";
+//		for (int n = 0; n < b.length; n++) {
+//			tmp = (Integer.toHexString(b[n] & 0XFF));
+//			if (tmp.length() == 1) {
+//				sb.append("0" + tmp);
+//			} else {
+//				sb.append(tmp);
+//			}
+//		}
+//		return sb.toString().toUpperCase();
+//	}
+
+	public static String plainTextPassword(String text) throws Exception {
 		if (StringUtils.isEmpty(text)) {
 			return text;
 		}
@@ -191,7 +187,7 @@ public class Crypto {
 			String value = StringEscapeUtils.unescapeJson(matcher.group(1));
 			if (StringUtils.startsWithIgnoreCase(value, "ENCRYPT:")) {
 				String de = StringUtils.substringAfter(value, ":");
-				return aesDecrypt(de);
+				return decrypt(de, KEY);
 			} else {
 				String eval = ScriptFactory.functionalization(StringEscapeUtils.unescapeJson(value));
 				ScriptContext scriptContext = new SimpleScriptContext();
@@ -201,4 +197,10 @@ public class Crypto {
 			return text;
 		}
 	}
+
+	public static String defaultEncrypt(String data) throws Exception {
+		byte[] bt = encrypt(data.getBytes(), KEY.getBytes());
+		String str = Base64.encodeBase64URLSafeString(bt);
+		return URLEncoder.encode(str, utf8);
+	}
 }

+ 51 - 35
o2server/x_console/src/main/java/com/x/server/console/action/ActionControl.java

@@ -18,7 +18,6 @@ import org.apache.commons.lang3.math.NumberUtils;
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
-import com.x.base.core.project.tools.ListTools;
 
 /*
 @author zhourui
@@ -28,8 +27,6 @@ public class ActionControl extends ActionBase {
 
 	private static Logger logger = LoggerFactory.getLogger(ActionControl.class);
 
-	private static Options options = new Options();
-
 	private static final String CMD_PPE = "ppe";
 	private static final String CMD_OS = "os";
 	private static final String CMD_HS = "hs";
@@ -37,15 +34,14 @@ public class ActionControl extends ActionBase {
 	private static final String CMD_TD = "td";
 	private static final String CMD_EC = "ec";
 	private static final String CMD_DD = "dd";
-	// private static final String CMD_DS = "ds";
 	private static final String CMD_RD = "rd";
-	// private static final String CMD_RS = "rs";
 	private static final String CMD_CLH2 = "clh2";
 	private static final String CMD_UF = "uf";
 	private static final String CMD_DDL = "ddl";
 	private static final String CMD_RST = "rst";
 	private static final String CMD_SC = "sc";
 	private static final String CMD_EN = "en";
+	private static final String CMD_DE = "de";
 
 	private static final int REPEAT_MAX = 100;
 	private static final int REPEAT_MIN = 1;
@@ -86,9 +82,11 @@ public class ActionControl extends ActionBase {
 				sc(cmd);
 			} else if (cmd.hasOption(CMD_EN)) {
 				en(cmd);
+			} else if (cmd.hasOption(CMD_DE)) {
+				de(cmd);
 			} else {
 				HelpFormatter formatter = new HelpFormatter();
-				formatter.printHelp("control command", options);
+				formatter.printHelp("control command", displayOptions());
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -96,6 +94,7 @@ public class ActionControl extends ActionBase {
 	}
 
 	private static Options options() {
+		Options options = new Options();
 		options.addOption(ppeOption());
 		options.addOption(osOption());
 		options.addOption(hsOption());
@@ -103,81 +102,104 @@ public class ActionControl extends ActionBase {
 		options.addOption(tdOption());
 		options.addOption(ecOption());
 		options.addOption(ddOption());
-		// options.addOption(dsOption());
 		options.addOption(rdOption());
-		// options.addOption(rsOption());
 		options.addOption(clh2Option());
 		options.addOption(ufOption());
 		options.addOption(ddlOption());
 		options.addOption(rstOption());
 		options.addOption(scOption());
 		options.addOption(enOption());
+		options.addOption(deOption());
 		return options;
 	}
 
+	private static Options displayOptions() {
+		Options displayOptions = new Options();
+		displayOptions.addOption(ppeOption());
+		displayOptions.addOption(osOption());
+		displayOptions.addOption(hsOption());
+		displayOptions.addOption(hdOption());
+		displayOptions.addOption(tdOption());
+		displayOptions.addOption(ecOption());
+		displayOptions.addOption(ddOption());
+		displayOptions.addOption(rdOption());
+		displayOptions.addOption(clh2Option());
+		displayOptions.addOption(ufOption());
+		displayOptions.addOption(ddlOption());
+		displayOptions.addOption(rstOption());
+		displayOptions.addOption(scOption());
+		displayOptions.addOption(enOption());
+		return displayOptions;
+	}
+
 	private static Option ppeOption() {
 		return Option.builder(CMD_PPE).longOpt("processPlatformExecutor").hasArg(false).desc("显示流程平台执行线程状态.").build();
 	}
 
 	private static Option osOption() {
-		return Option.builder("os").longOpt("operatingSystem").argName("repeat").numberOfArgs(1).optionalArg(true)
+		return Option.builder(CMD_OS).longOpt("operatingSystem").argName("repeat").numberOfArgs(1).optionalArg(true)
 				.hasArgs().desc("显示操作系统信息,间隔2秒.").build();
-
 	}
 
 	private static Option hsOption() {
-		return Option.builder("hs").longOpt("httpStatus").argName("repeat").optionalArg(true).hasArgs()
+		return Option.builder(CMD_HS).longOpt("httpStatus").argName("repeat").optionalArg(true).hasArgs()
 				.desc("Http服务线程状态,间隔5秒.").build();
 	}
 
 	private static Option hdOption() {
-		return Option.builder("hd").longOpt("heapDump").hasArg(false).desc("生成堆转储文件.").build();
+		return Option.builder(CMD_HD).longOpt("heapDump").hasArg(false).desc("生成堆转储文件.").build();
 	}
 
 	private static Option tdOption() {
-		return Option.builder("td").longOpt("threadDump").argName("count").optionalArg(true).hasArg()
+		return Option.builder(CMD_TD).longOpt("threadDump").argName("count").optionalArg(true).hasArg()
 				.desc("服务器线程状态,间隔2秒.合并多次执行线程信息到最后一份日志.").build();
 	}
 
 	private static Option ecOption() {
-		return Option.builder("ec").longOpt("eraseContent").argName("type").hasArg().optionalArg(false)
+		return Option.builder(CMD_EC).longOpt("eraseContent").argName("type").hasArg().optionalArg(false)
 				.desc("清空实例数据,保留设计数据,type可选值: bbs,cms,log,processPlatform,message,org或者实体类名.").build();
 	}
 
 	private static Option clh2Option() {
-		return Option.builder("clh2").longOpt("compactLocalH2").desc("压缩本地H2数据库.").build();
+		return Option.builder(CMD_CLH2).longOpt("compactLocalH2").desc("压缩本地H2数据库.").build();
 	}
 
 	private static Option ddOption() {
-		return Option.builder("dd").longOpt("dumpData").argName("path").hasArg().optionalArg(true)
+		return Option.builder(CMD_DD).longOpt("dumpData").argName("path").hasArg().optionalArg(true)
 				.desc("导出数据库服务器的数据转换成json格式保存到本地文件.").build();
 	}
 
 	private static Option rdOption() {
-		return Option.builder("rd").longOpt("restoreData").argName("path or date").hasArg()
+		return Option.builder(CMD_RD).longOpt("restoreData").argName("path or date").hasArg()
 				.desc("将导出的json格式数据恢复到数据库服务器.").build();
 	}
 
 	private static Option ufOption() {
-		return Option.builder("uf").longOpt("updateFile").argName("path").hasArg().desc("升级服务器,升级前请注意备份.").build();
+		return Option.builder(CMD_UF).longOpt("updateFile").argName("path").hasArg().desc("升级服务器,升级前请注意备份.").build();
 	}
 
 	private static Option ddlOption() {
-		return Option.builder("ddl").longOpt("DataDefinitionLanguage").argName("type").hasArg()
+		return Option.builder(CMD_DDL).longOpt("DataDefinitionLanguage").argName("type").hasArg()
 				.desc("导出数据定义语句:建表语句:build,数据库创建:createDB,数据库删除dropDB.").build();
 	}
 
 	private static Option rstOption() {
-		return Option.builder("rst").longOpt("restartApplication").argName("name").hasArg()
+		return Option.builder(CMD_RST).longOpt("restartApplication").argName("name").hasArg()
 				.desc("重启指定应用: 应用名称:name, 不带.war").build();
 	}
 
 	private static Option scOption() {
-		return Option.builder("sc").longOpt("showCluster").desc("显示集群信息.").build();
+		return Option.builder(CMD_SC).longOpt("showCluster").desc("显示集群信息.").build();
 	}
 
 	private static Option enOption() {
-		return Option.builder("en").longOpt("encrypt password text.").desc("密码文本加密.").build();
+		return Option.builder(CMD_EN).longOpt("encrypt password text.").argName("text").numberOfArgs(1).hasArg()
+				.desc("密码文本加密.").build();
+	}
+
+	private static Option deOption() {
+		return Option.builder(CMD_DE).longOpt("decrypt password text.").argName("text").numberOfArgs(1).hasArg()
+				.desc("密码文本解密.").hasArg().build();
 	}
 
 	private void ec(CommandLine cmd) throws Exception {
@@ -238,24 +260,12 @@ public class ActionControl extends ActionBase {
 		dumpData.execute(path);
 	}
 
-//	private void ds(CommandLine cmd) throws Exception {
-//		String path = Objects.toString(cmd.getOptionValue(CMD_DS), "");
-//		DumpStorage dumpStorage = new DumpStorage();
-//		dumpStorage.execute(path);
-//	}
-
 	private void rd(CommandLine cmd) throws Exception {
 		String path = Objects.toString(cmd.getOptionValue(CMD_RD), "");
 		RestoreData restoreData = new RestoreData();
 		restoreData.execute(path);
 	}
 
-//	private void rs(CommandLine cmd) throws Exception {
-//		String path = Objects.toString(cmd.getOptionValue(CMD_RS), "");
-//		RestoreStorage restoreStorage = new RestoreStorage();
-//		restoreStorage.execute(path);
-//	}
-
 	private void hs(CommandLine cmd) {
 		final Integer repeat = this.getArgInteger(cmd, CMD_HS, 1);
 		HttpStatus httpStatus = new HttpStatus(repeat);
@@ -268,7 +278,7 @@ public class ActionControl extends ActionBase {
 	}
 
 	private void os(CommandLine cmd) {
-		final Integer command = this.getArgInteger(cmd, "os", 1);
+		final Integer command = this.getArgInteger(cmd, CMD_OS, 1);
 		OperatingSystem operatingSystem = new OperatingSystem(command);
 		operatingSystem.start();
 	}
@@ -307,6 +317,12 @@ public class ActionControl extends ActionBase {
 		en.execute(text);
 	}
 
+	private void de(CommandLine cmd) throws Exception {
+		String text = Objects.toString(cmd.getOptionValue(CMD_DE), "");
+		Decrypt en = new Decrypt();
+		en.execute(text);
+	}
+
 	private Integer getArgInteger(CommandLine cmd, String opt, Integer defaultValue) {
 		Integer repeat = defaultValue;
 		String r = cmd.getOptionValue(opt);

+ 16 - 0
o2server/x_console/src/main/java/com/x/server/console/action/Decrypt.java

@@ -0,0 +1,16 @@
+package com.x.server.console.action;
+
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.Crypto;
+
+public class Decrypt {
+
+	private static Logger logger = LoggerFactory.getLogger(Decrypt.class);
+
+	public boolean execute(String text) throws Exception {
+		logger.print("decrypt text:{}", Crypto.plainTextPassword(text));
+		return true;
+	}
+
+}

+ 1 - 2
o2server/x_console/src/main/java/com/x/server/console/action/Encrypt.java

@@ -9,8 +9,7 @@ public class Encrypt {
 	private static Logger logger = LoggerFactory.getLogger(Encrypt.class);
 
 	public boolean execute(String text) throws Exception {
-
-		logger.print("encrypt text:(ENCRYPT:{})", Crypto.aesEncrypt(text));
+		logger.print("encrypt text:(ENCRYPT:{})", Crypto.defaultEncrypt(text));
 		return true;
 	}