Skip to content

Commit 1e0cc4e

Browse files
committed
add more builtin tools
1 parent 18aa80a commit 1e0cc4e

File tree

17 files changed

+727
-4
lines changed

17 files changed

+727
-4
lines changed
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package io.fluent.builtin.crypto;
2+
3+
4+
import io.fluent.builtin.exception.EncryptException;
5+
6+
import javax.crypto.Cipher;
7+
import javax.crypto.spec.IvParameterSpec;
8+
import javax.crypto.spec.SecretKeySpec;
9+
import java.nio.charset.StandardCharsets;
10+
import java.util.Base64;
11+
12+
/**
13+
* AES-128-CBC 算法
14+
* iv 默认取key
15+
*/
16+
public class AesUtil {
17+
18+
/**
19+
* AES
20+
*/
21+
static String ALGORITHM = "AES";
22+
/**
23+
* AES 算法
24+
*/
25+
static String AES_CBC_CIPHER = "AES/CBC/PKCS5Padding";
26+
/**
27+
* 偏移量
28+
*/
29+
private static final int OFFSET = 16;
30+
31+
32+
/**
33+
* 加密
34+
*
35+
* @param data 需要加密的内容
36+
* @param key 加密密码
37+
* @param iv 加密密码
38+
* @return
39+
*/
40+
public static byte[] encrypt(byte[] data, byte[] key, byte[] iv) {
41+
try {
42+
if (key.length < OFFSET) {
43+
byte[] tmp = new byte[OFFSET];
44+
System.arraycopy(key, 0, tmp, 0, key.length);
45+
key = tmp;
46+
}
47+
if (iv.length < 16) {
48+
byte[] tmp = new byte[16];
49+
System.arraycopy(iv, 0, tmp, 0, iv.length);
50+
iv = tmp;
51+
}
52+
SecretKeySpec secretKey = new SecretKeySpec(key, ALGORITHM);
53+
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv, 0, OFFSET);
54+
Cipher cipher = Cipher.getInstance(AES_CBC_CIPHER);
55+
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);
56+
return cipher.doFinal(data);
57+
} catch (Exception e) {
58+
throw new EncryptException("aes encrypt error:" + e.getMessage(), e);
59+
}
60+
}
61+
62+
/**
63+
* 解密
64+
*
65+
* @param data 待解密内容
66+
* @param key 解密密钥
67+
* @return
68+
*/
69+
public static byte[] decrypt(byte[] data, byte[] key, byte[] iv) {
70+
try {
71+
if (key.length < 16) {
72+
byte[] tmp = new byte[16];
73+
System.arraycopy(key, 0, tmp, 0, key.length);
74+
key = tmp;
75+
}
76+
if (iv.length < 16) {
77+
byte[] tmp = new byte[16];
78+
System.arraycopy(iv, 0, tmp, 0, iv.length);
79+
iv = tmp;
80+
}
81+
SecretKeySpec secretKey = new SecretKeySpec(key, ALGORITHM);
82+
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv, 0, OFFSET);
83+
Cipher cipher = Cipher.getInstance(AES_CBC_CIPHER);
84+
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);
85+
return cipher.doFinal(data);
86+
} catch (Exception e) {
87+
throw new EncryptException("ase decrypt error", e);
88+
}
89+
}
90+
91+
/**
92+
* 加密
93+
* <p>
94+
* * 定义 aes 加密的key
95+
* * 密钥 必须是16位, 自定义,
96+
* * 如果不是16位, 则会出现InvalidKeyException: Illegal key size
97+
* * 解决方案有两种:
98+
* * 需要安装Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files(可以在Oracle下载).
99+
* * .设置设置key的长度为16个字母和数字的字符窜(128 Bit/8=16字符)就不报错了。
100+
*
101+
* @param data 需要加密的内容
102+
* @param key 加密密码
103+
* @return
104+
*/
105+
public static String encrypt(String data, String key) {
106+
byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
107+
byte[] valueByte = encrypt(data.getBytes(StandardCharsets.UTF_8), keyBytes, keyBytes);
108+
return Base64.getEncoder().encodeToString(valueByte);
109+
}
110+
111+
/**
112+
* 解密
113+
*
114+
* @param data 待解密内容 base64 字符串
115+
* @param key 解密密钥
116+
* @return
117+
*/
118+
public static String decrypt(String data, String key) {
119+
byte[] originalData = Base64.getDecoder().decode(data.getBytes());
120+
byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
121+
byte[] valueByte = decrypt(originalData, keyBytes, keyBytes);
122+
return new String(valueByte);
123+
}
124+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package io.fluent.builtin.crypto;
2+
3+
4+
import io.fluent.builtin.exception.EncryptException;
5+
6+
import javax.crypto.Cipher;
7+
import javax.crypto.spec.SecretKeySpec;
8+
import java.nio.charset.StandardCharsets;
9+
import java.util.Base64;
10+
11+
/**
12+
* des算法加解密
13+
* DES/ECB/PKCS5Padding
14+
*
15+
*/
16+
public class DesUtil {
17+
18+
/**
19+
* AES
20+
*/
21+
static final String ALGORITHM = "DES";
22+
/**
23+
* AES 算法
24+
*/
25+
static final String DES_ECB_CIPHER = "DES/ECB/PKCS5Padding";
26+
27+
/**
28+
* 加密
29+
*
30+
* @param data 需要加密的内容
31+
* @param key 加密密码
32+
* @return
33+
*/
34+
public static byte[] encrypt(byte[] data, byte[] key) {
35+
try {
36+
//生成KEY
37+
SecretKeySpec secretKey = new SecretKeySpec(key, ALGORITHM);
38+
Cipher cipher = Cipher.getInstance(DES_ECB_CIPHER);
39+
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
40+
return cipher.doFinal(data);
41+
} catch (Exception e) {
42+
throw new EncryptException("encrypt error", e);
43+
}
44+
}
45+
46+
/**
47+
* 解密
48+
*
49+
* @param data 待解密内容
50+
* @param key 解密密钥
51+
* @return
52+
*/
53+
public static byte[] decrypt(byte[] data, byte[] key) {
54+
try {
55+
SecretKeySpec secretKey = new SecretKeySpec(key, ALGORITHM);
56+
Cipher cipher = Cipher.getInstance(DES_ECB_CIPHER);
57+
cipher.init(Cipher.DECRYPT_MODE, secretKey);
58+
return cipher.doFinal(data);
59+
} catch (Exception e) {
60+
throw new EncryptException("decrypt error", e);
61+
}
62+
}
63+
64+
/**
65+
* 加密
66+
*
67+
* @param data 需要加密的内容
68+
* @param key 加密密码
69+
* @return
70+
*/
71+
public static String encrypt(String data, String key) {
72+
byte[] valueByte = encrypt(data.getBytes(StandardCharsets.UTF_8), key.getBytes(StandardCharsets.UTF_8));
73+
return Base64.getEncoder().encodeToString(valueByte);
74+
}
75+
76+
/**
77+
* 解密
78+
*
79+
* @param data 待解密内容 base64 字符串
80+
* @param key 解密密钥
81+
* @return
82+
*/
83+
public static String decrypt(String data, String key) {
84+
byte[] originalData = Base64.getDecoder().decode(data.getBytes());
85+
byte[] valueByte = decrypt(originalData, key.getBytes(StandardCharsets.UTF_8));
86+
return new String(valueByte);
87+
}
88+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.fluent.builtin.exception;
2+
3+
public class EncryptException extends SystemException {
4+
5+
public EncryptException(String message, Throwable throwable) {
6+
super(message, throwable);
7+
}
8+
9+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.fluent.builtin.exception;
2+
3+
public class SystemException extends WrapMessageException {
4+
private static final long serialVersionUID = 1L;
5+
6+
public SystemException(String message) {
7+
super(message);
8+
}
9+
10+
public SystemException(String message, Throwable cause) {
11+
super(message, cause);
12+
}
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.fluent.builtin.exception;
2+
3+
/**
4+
* 只包装了 错误信息 的 {@link RuntimeException}.
5+
* 用于 {@link com.sprainkle.spring.cloud.advance.common.core.exception.assertion.Assert} 中用于包装自定义异常信息
6+
*
7+
8+
*/
9+
public class WrapMessageException extends RuntimeException {
10+
11+
public WrapMessageException(String message) {
12+
super(message);
13+
}
14+
15+
public WrapMessageException(String message, Throwable cause) {
16+
super(message, cause);
17+
}
18+
19+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.fluent.builtin.meta;
2+
3+
import java.lang.reflect.ParameterizedType;
4+
import java.lang.reflect.Type;
5+
6+
public class TargetType<T> {
7+
8+
public Type getType() {
9+
10+
Type t = getClass().getGenericSuperclass();
11+
if (!(t instanceof ParameterizedType)) {
12+
throw new IllegalStateException("Incorrect use of TypeToken: " + t);
13+
}
14+
ParameterizedType pt = (ParameterizedType) t;
15+
Type[] typeArgs = pt.getActualTypeArguments();
16+
if (typeArgs.length > 0) {
17+
return typeArgs[0];
18+
}
19+
throw new IllegalStateException("Incorrect use of TypeToken: " + t);
20+
}
21+
22+
@SuppressWarnings("unchecked")
23+
public Class<T> getClassType() {
24+
25+
Type type = getType();
26+
if (type instanceof ParameterizedType) {
27+
return (Class<T>) ((ParameterizedType) type).getRawType();
28+
} else {
29+
return (Class<T>) type;
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)