This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/develop by this push:
new 686bbabb modify encrypt type (#311)
686bbabb is described below
commit 686bbabb47ca12c184b4dd0a7c2e89ae06a5a1e7
Author: jintao zhu <[email protected]>
AuthorDate: Mon Dec 2 10:05:11 2024 +0800
modify encrypt type (#311)
* modify encrypt type format
* make key effective
* change default type
---------
Co-authored-by: zhujt <[email protected]>
---
.../apache/tsfile/common/conf/TSFileConfig.java | 9 ++---
.../org/apache/tsfile/encrypt/EncryptUtils.java | 43 +++++++++++++---------
.../java/org/apache/tsfile/encrypt/IDecryptor.java | 26 +++----------
.../java/org/apache/tsfile/encrypt/IEncrypt.java | 2 +
.../java/org/apache/tsfile/encrypt/IEncryptor.java | 26 +++----------
.../java/org/apache/tsfile/write/TsFileWriter.java | 2 +-
.../tsfile/encrypt/AES128TsFileReadWriteTest.java | 2 +-
7 files changed, 46 insertions(+), 64 deletions(-)
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
b/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
index eeef8345..99a71589 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/common/conf/TSFileConfig.java
@@ -161,11 +161,8 @@ public class TSFileConfig implements Serializable {
/** encryptKey, this should be 16 bytes String. */
private String encryptKey = "abcdefghijklmnop";
- /**
- * default encryptType is "org.apache.tsfile.encrypt.UNENCRYPTED", TsFile
supports UNENCRYPTED or
- * AES128.
- */
- private String encryptType = "org.apache.tsfile.encrypt.UNENCRYPTED";
+ /** default encryptType is "UNENCRYPTED", TsFile supports UNENCRYPTED or
AES128. */
+ private String encryptType = "UNENCRYPTED";
/** Line count threshold for checking page memory occupied size. */
private int pageCheckSizeThreshold = 100;
@@ -275,6 +272,8 @@ public class TSFileConfig implements Serializable {
return;
}
this.encryptKey = EncryptUtils.getEncryptKeyFromPath(encryptKeyPath);
+ EncryptUtils.encryptParam = EncryptUtils.getEncryptParameter();
+ EncryptUtils.normalKeyStr = EncryptUtils.getNormalKeyStr();
}
public int getGroupSizeInByte() {
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/encrypt/EncryptUtils.java
b/java/tsfile/src/main/java/org/apache/tsfile/encrypt/EncryptUtils.java
index cae1ecac..4d70646b 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/encrypt/EncryptUtils.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/encrypt/EncryptUtils.java
@@ -21,6 +21,7 @@ package org.apache.tsfile.encrypt;
import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.common.conf.TSFileDescriptor;
import org.apache.tsfile.exception.encrypt.EncryptException;
+import org.apache.tsfile.exception.encrypt.EncryptKeyLengthNotMatchException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,10 +39,25 @@ public class EncryptUtils {
private static final String defaultKey = "abcdefghijklmnop";
+ private static final String encryptClassPrefix =
"org.apache.tsfile.encrypt.";
+
public static String normalKeyStr = getNormalKeyStr();
public static EncryptParameter encryptParam = getEncryptParameter();
+ public static String getEncryptClass(String encryptType) {
+ String classNameRegex = "^(\\p{Alpha}\\w*)(\\.\\p{Alpha}\\w+)+$";
+ if (IEncrypt.encryptTypeToClassMap.containsKey(encryptType)) {
+ return IEncrypt.encryptTypeToClassMap.get(encryptType);
+ } else if (encryptType.matches(classNameRegex)) {
+ IEncrypt.encryptTypeToClassMap.put(encryptType, encryptType);
+ return encryptType;
+ } else {
+ IEncrypt.encryptTypeToClassMap.put(encryptType, encryptClassPrefix +
encryptType);
+ return encryptClassPrefix + encryptType;
+ }
+ }
+
public static String getEncryptKeyFromPath(String path) {
if (path == null) {
logger.error("encrypt key path is null, use the default key");
@@ -63,6 +79,9 @@ public class EncryptUtils {
sb.append("\n").append(line);
}
}
+ if (sb.toString().length() != 16) {
+ throw new EncryptKeyLengthNotMatchException(16,
sb.toString().length());
+ }
return sb.toString();
} catch (IOException e) {
throw new EncryptException("Read main encrypt key error", e);
@@ -117,7 +136,7 @@ public class EncryptUtils {
return str;
} catch (Exception e) {
throw new EncryptException(
- "SHA-256 function not found while using SHA-256 to generate data
key");
+ "SHA-256 function not found while using SHA-256 to generate data
key", e);
}
}
@@ -178,13 +197,14 @@ public class EncryptUtils {
public static IEncrypt getEncrypt(String encryptType, byte[] dataEncryptKey)
{
try {
- if (IEncrypt.encryptMap.containsKey(encryptType)) {
- return ((IEncrypt)
IEncrypt.encryptMap.get(encryptType).newInstance(dataEncryptKey));
+ String className = getEncryptClass(encryptType);
+ if (IEncrypt.encryptMap.containsKey(className)) {
+ return ((IEncrypt)
IEncrypt.encryptMap.get(className).newInstance(dataEncryptKey));
}
- Class<?> encryptTypeClass = Class.forName(encryptType);
+ Class<?> encryptTypeClass = Class.forName(className);
java.lang.reflect.Constructor<?> constructor =
encryptTypeClass.getDeclaredConstructor(byte[].class);
- IEncrypt.encryptMap.put(encryptType, constructor);
+ IEncrypt.encryptMap.put(className, constructor);
return ((IEncrypt) constructor.newInstance(dataEncryptKey));
} catch (ClassNotFoundException e) {
throw new EncryptException("Get encryptor class failed: " + encryptType,
e);
@@ -213,18 +233,7 @@ public class EncryptUtils {
encryptType = "org.apache.tsfile.encrypt.UNENCRYPTED";
dataEncryptKey = null;
}
- try {
- Class<?> encryptTypeClass = Class.forName(encryptType);
- java.lang.reflect.Constructor<?> constructor =
- encryptTypeClass.getDeclaredConstructor(byte[].class);
- return ((IEncrypt) constructor.newInstance(dataEncryptKey));
- } catch (ClassNotFoundException e) {
- throw new EncryptException("Get encryptor class failed: " + encryptType,
e);
- } catch (NoSuchMethodException e) {
- throw new EncryptException("Get constructor for encryptor failed: " +
encryptType, e);
- } catch (InvocationTargetException | InstantiationException |
IllegalAccessException e) {
- throw new EncryptException("New encryptor instance failed: " +
encryptType, e);
- }
+ return getEncrypt(encryptType, dataEncryptKey);
}
public static byte[] getSecondKeyFromStr(String str) {
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IDecryptor.java
b/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IDecryptor.java
index 36b90897..bdf90b92 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IDecryptor.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IDecryptor.java
@@ -34,13 +34,14 @@ public interface IDecryptor {
static IDecryptor getDecryptor(String type, byte[] key) {
try {
- if (IEncrypt.encryptMap.containsKey(type)) {
- return ((IEncrypt)
IEncrypt.encryptMap.get(type).newInstance(key)).getDecryptor();
+ String className = EncryptUtils.getEncryptClass(type);
+ if (IEncrypt.encryptMap.containsKey(className)) {
+ return ((IEncrypt)
IEncrypt.encryptMap.get(className).newInstance(key)).getDecryptor();
}
- Class<?> encryptClass = Class.forName(type);
+ Class<?> encryptClass = Class.forName(className);
java.lang.reflect.Constructor<?> constructor =
encryptClass.getDeclaredConstructor(byte[].class);
- IEncrypt.encryptMap.put(type, constructor);
+ IEncrypt.encryptMap.put(className, constructor);
return ((IEncrypt) constructor.newInstance(key)).getDecryptor();
} catch (ClassNotFoundException e) {
throw new EncryptException("Get decryptor class failed: " + type, e);
@@ -54,22 +55,7 @@ public interface IDecryptor {
static IDecryptor getDecryptor(EncryptParameter encryptParam) {
String type = encryptParam.getType();
byte[] key = encryptParam.getKey();
- try {
- if (IEncrypt.encryptMap.containsKey(type)) {
- return ((IEncrypt)
IEncrypt.encryptMap.get(type).newInstance(key)).getDecryptor();
- }
- Class<?> encryptClass = Class.forName(type);
- java.lang.reflect.Constructor<?> constructor =
- encryptClass.getDeclaredConstructor(byte[].class);
- IEncrypt.encryptMap.put(type, constructor);
- return ((IEncrypt) constructor.newInstance(key)).getDecryptor();
- } catch (ClassNotFoundException e) {
- throw new EncryptException("Get decryptor class failed: " + type, e);
- } catch (NoSuchMethodException e) {
- throw new EncryptException("Get constructor for decryptor failed: " +
type, e);
- } catch (InvocationTargetException | InstantiationException |
IllegalAccessException e) {
- throw new EncryptException("New decryptor instance failed: " + type, e);
- }
+ return getDecryptor(type, key);
}
byte[] decrypt(byte[] data);
diff --git a/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IEncrypt.java
b/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IEncrypt.java
index 24b691d2..0ea6bbef 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IEncrypt.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IEncrypt.java
@@ -25,6 +25,8 @@ public interface IEncrypt {
static ConcurrentHashMap<String, java.lang.reflect.Constructor<?>>
encryptMap =
new ConcurrentHashMap<>();
+ static ConcurrentHashMap<String, String> encryptTypeToClassMap = new
ConcurrentHashMap<>();
+
IDecryptor getDecryptor();
IEncryptor getEncryptor();
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IEncryptor.java
b/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IEncryptor.java
index b80d2579..4fa63fd1 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IEncryptor.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/encrypt/IEncryptor.java
@@ -34,13 +34,14 @@ public interface IEncryptor {
static IEncryptor getEncryptor(String type, byte[] key) {
try {
- if (IEncrypt.encryptMap.containsKey(type)) {
- return ((IEncrypt)
IEncrypt.encryptMap.get(type).newInstance(key)).getEncryptor();
+ String className = EncryptUtils.getEncryptClass(type);
+ if (IEncrypt.encryptMap.containsKey(className)) {
+ return ((IEncrypt)
IEncrypt.encryptMap.get(className).newInstance(key)).getEncryptor();
}
- Class<?> encryptClass = Class.forName(type);
+ Class<?> encryptClass = Class.forName(className);
java.lang.reflect.Constructor<?> constructor =
encryptClass.getDeclaredConstructor(byte[].class);
- IEncrypt.encryptMap.put(type, constructor);
+ IEncrypt.encryptMap.put(className, constructor);
return ((IEncrypt) constructor.newInstance(key)).getEncryptor();
} catch (ClassNotFoundException e) {
throw new EncryptException("Get encryptor class failed: " + type, e);
@@ -54,22 +55,7 @@ public interface IEncryptor {
static IEncryptor getEncryptor(EncryptParameter encryptParam) {
String type = encryptParam.getType();
byte[] key = encryptParam.getKey();
- try {
- if (IEncrypt.encryptMap.containsKey(type)) {
- return ((IEncrypt)
IEncrypt.encryptMap.get(type).newInstance(key)).getEncryptor();
- }
- Class<?> encryptClass = Class.forName(type);
- java.lang.reflect.Constructor<?> constructor =
- encryptClass.getDeclaredConstructor(byte[].class);
- IEncrypt.encryptMap.put(type, constructor);
- return ((IEncrypt) constructor.newInstance(key)).getEncryptor();
- } catch (ClassNotFoundException e) {
- throw new EncryptException("Get encryptor class failed: " + type, e);
- } catch (NoSuchMethodException e) {
- throw new EncryptException("Get constructor for encryptor failed: " +
type, e);
- } catch (InvocationTargetException | InstantiationException |
IllegalAccessException e) {
- throw new EncryptException("New encryptor instance failed: " + type, e);
- }
+ return getEncryptor(type, key);
}
byte[] encrypt(byte[] data);
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
b/java/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
index 20a38078..a8aae270 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
@@ -202,7 +202,7 @@ public class TsFileWriter implements AutoCloseable {
.encrypt(dataEncryptKey);
} catch (Exception e) {
throw new EncryptException(
- "SHA-256 function not found while using SHA-256 to generate data
key");
+ "SHA-256 function not found while using SHA-256 to generate data
key", e);
}
} else {
encryptLevel = "0";
diff --git
a/java/tsfile/src/test/java/org/apache/tsfile/encrypt/AES128TsFileReadWriteTest.java
b/java/tsfile/src/test/java/org/apache/tsfile/encrypt/AES128TsFileReadWriteTest.java
index a9e9d16d..f11c376d 100644
---
a/java/tsfile/src/test/java/org/apache/tsfile/encrypt/AES128TsFileReadWriteTest.java
+++
b/java/tsfile/src/test/java/org/apache/tsfile/encrypt/AES128TsFileReadWriteTest.java
@@ -66,7 +66,7 @@ public class AES128TsFileReadWriteTest {
@Before
public void setUp() {
conf.setEncryptFlag("true");
- conf.setEncryptType("org.apache.tsfile.encrypt.AES128");
+ conf.setEncryptType("AES128");
conf.setEncryptKey("thisisourtestkey");
f = new File(path);
if (f.exists()) {