常用工具类 UserUtils、DictUtils、CacheUtils、Global、国密
# 常用工具类
1、获取当前用户:
- UserUtils.getUser();
- entity.getCurrentUser(); // v5.3.0 之前版本
- entity.currentUser(); // v5.3.0+ 及之后版本
- ${@UserUtils.getUser().getUserName()} // 视图页面获取用户名
- ${isNotBlank(@UserUtils.getUser().getId())} // 视图页面判断登录状态
- ${user()} // 获取当前用户数据 v5.3.0+
- ${user(userCode)} // 获取某用户数据 v5.3.0+
2、获取当前用户员工:
- EmpUtils.getEmployee();
- ${@EmpUtils.getEmployee().getEmpName()} // 视图页面获取员工姓名
- EmpUtils.get(empCode); // 根据员工编码获取某员工信息
- EmpUtils.getByUserCode(userCode); // 根据用户编码获取某员工信息
- EmpUtils.getByLoginCode(loginCode); // 根据登录账号获取某员工信息
- EmpUtils.getEmployeeOfficeList(); // 获取附属部门信息列表
3、获取当前用户部门:
- EmpUtils.getOffice();
- ${@EmpUtils.getOffice().getOfficeName()} // 视图页面获取所在部门
- EmpUtils.getOfficeAllList(); // 获取所有部门列表
- EmpUtils.getOfficeCodes(); // 获取当前员工部门编码(包含附属部门)
- EmpUtils.getOfficeCodesAndChildren(); // 获取当前员工部门编码及子机构(包含附属部门)
- EmpUtils.getOfficeCodesByType(type); // 根据机构类型获取员工机构(包含附属部门)
- EmpUtils.getOfficeParentCodess(); // 获取当前员工所在机构的所有上级部门
- EmpUtils.getOfficeParentCodessByType(type); // 根据机构类型获取当前员工所在机构的所有上级部门
- 上述 Office 换为 Company 则为获取公司数据相应方法。
4、获取当前用户菜单:
- UserUtils.getMenuList();
- UserUtils.getMenuListByParentCode(parentCode);
- UserUtils.getMenuTree(); // childList 形式
- UserUtils.getMenuTreeByParentCode(parentCode); // childList 形式
5、获取当前用户的角色:
- UserUtils.getUser().getRoleList();
- RoleUtils.hasCurrentUserRole(roleCode); // 判断当前用户是否包含某角色
- RoleUtils.hasUserRole(userCode, roleCode); // 判断某用户是否包含某角色
6、获取当前用户授权信息:
- UserUtils.getAuthInfo();
7、获取或设置当前用户缓存:
- UserUtils.getCache(key);
- UserUtils.putCache(key);
- UserUtils.clearCache();
8、加密解密、国密,见本文目录
# 用户工具 UserUtils
/**
* 用户工具类
* @author ThinkGem
*/
public class UserUtils {
/**
* 根据用户编码获取用户
* @param userCode
* @return 取不到返回null
*/
public static User get(String userCode);
/**
* 根据登录账号获取用户(不区分大小写)
* @param loginCode
* @return 取不到返回null
*/
public static User getByLoginCode(String loginCode);
/**
* 根据登录账号获取用户(不区分大小写)
* @param loginCode
* @return 取不到返回null
*/
public static User getByLoginCode(String loginCode, String corpCode);
/**
* 根据用户类型和引用Code获取用户
* @param userType
* @param refCode
* @return
*/
public static User getByTypeAndRef(String userType, String refCode);
/**
* 获取当前用户
* @return 取不到返回 new User()
*/
public static User getUser();
/**
* 获取用户类型值(jeesite.yml中的user.userTypeMap配置)
* @param userType 用户类型
* @param key 配置参数key
* @return
*/
public static String getUserTypeValue(String userType, String key);
/**
* 获取当前用户权限信息
* @return
*/
public static AuthorizationInfo getAuthInfo();
/**
* 获取当前用户授权菜单
* @return
*/
public static List<Menu> getMenuList();
/**
* 获取当前用户授权菜单
* @param parentCode 父级菜单编码,仅当前级别数据;如果使用“0,”开头,则按父级查询所有子节点数据
* @return
*/
public static List<Menu> getMenuListByParentCode(String parentCode);
/**
* 获取当前用户授权菜单树([code,childList[code,childList[...]]]的形式)
* @return
*/
public static List<Menu> getMenuTree();
/**
* 获取当前用户授权菜单树([code,childList[code,childList[...]]]的形式)
* @param parentCode 父级菜单编码,仅当前级别数据;如果使用“0,”开头,则按父级查询所有子节点数据
* @return
*/
public static List<Menu> getMenuTreeByParentCode(String parentCode);
/**
* 根据用户名获取SSO的登录令牌(sso密钥+用户名+日期,进行md5加密)
* 生成举例: Md5Utils.md5(secretKey+username+20150101))
* @param username 用户登录名
* @return token
*/
public static String getSsoToken(String username);
/**
* 获取当前登录者主体对象(未登录返回空)
*/
public static LoginInfo getLoginInfo();
/**
* 获取当前会话对象
* @return
*/
public static Session getSession();
/**
* 获取当前用户主题对象,可进行验证权限
*/
public static Subject getSubject();
/**
* 获取用户缓存值
* @param key
* @return
*/
public static <V> V getCache(String key);
/**
* 获取用户缓存值
* @param key
* @param defaultValue
* @return
*/
public static <V> V getCache(String key, V defaultValue);
/**
* 设置用户缓存值
* @param key
* @param value
*/
public static <V> void putCache(String key, V value);
/**
* 移除用户缓存值
* @param key
*/
public static void removeCache(String key);
/**
* 移除用户缓存值
* @param key
*/
public static void removeCacheByKeyPrefix(String keyPrefix);
/**
* 清除当前用户缓存
*/
public static void clearCache();
/**
* 清除指定用户缓存,不包括改用的SESSION缓存
* @param user.userCode
*/
public static void clearCache(User user);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# 员工工具 EmpUtils
/**
* 员工部门工具类
* @author ThinkGem
*/
public class EmpUtils {
/**
* 根据员工编码获取员工
* @author ThinkGem
*/
public static Employee get(String empCode);
/**
* 根据用户对象获取员工,不是员工返回null
* @author ThinkGem
*/
public static Employee get(User user);
/**
* 根据用户编码获取员工,找不到或不是员工返回null
* @author ThinkGem
*/
public static Employee getByUserCode(String userCode);
/**
* 根据登录账号获取员工,找不到或不是员工返回null
* @author ThinkGem
*/
public static Employee getByLoginCode(String loginCode);
/**
* 获取当前登录的员工
* @author ThinkGem
*/
public static Employee getEmployee();
/**
* 获取当前附属机构对象列表
* @author ThinkGem
*/
public static List<EmployeeOffice> getEmployeeOfficeList();
/**
* 根据机构编码获取机构对象
* @param officeCode
* @author ThinkGem
*/
public static Office getOffice(String officeCode);
/**
* 获取当前员工机构
* @author ThinkGem
*/
public static Office getOffice();
/**
* 获取当前员工所有的机构
* @author ThinkGem
*/
public static List<Office> getOfficeAllList();
/**
* 获取当前员工所有机构编码,包括附属机构(数据权限用)
* @author ThinkGem
*/
public static String[] getOfficeCodes();
/**
* 获取当前员工所有机构编码,包括附属机构以及子机构(数据权限用)V4.2.0
* @author ThinkGem
*/
public static String[] getOfficeCodesAndChildren();
/**
* 根据机构类型,获取当前员工所有机构编码,包括附属机构(数据权限用)
* @author ThinkGem
*/
public static String[] getOfficeCodesByType(String type);
/**
* 获取当前员工所有上级机构编码,包括附属机构(数据权限用)
* @author ThinkGem
*/
public static String[] getOfficeParentCodess();
/**
* 根据机构类型,获取当前员工所有机构编码,包括附属机构(数据权限用)
* @author ThinkGem
*/
public static String[] getOfficeParentCodessByType(String type);
/**
* 根据公司编码获取公司对象
* @param companyCode
* @author ThinkGem
*/
public static Company getCompany(String companyCode);
/**
* 获取当前员工公司对象
* @author ThinkGem
*/
public static Company getCompany();
/**
* 获取当前员工所有的公司
* @author ThinkGem
*/
public static List<Company> getCompanyAllList();
/**
* 获取当前员工所有公司编码,包括子公司(数据权限用)V4.2.0
* @author ThinkGem
*/
public static String[] getCompanyCodesAndChildren();
/**
* 清除指定用户缓存,不包括改用的SESSION缓存
* @author ThinkGem
*/
public static void removeCache(String key);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# 字典数据 DictUtils
/**
* 字典工具类
* @author ThinkGem
*/
public class DictUtils {
/**
* 根据字典值获取字典标签
* @param dictType
* @param dictValue
* @param defaultValue
* @return
*/
public static String getDictLabel(String dictType, String dictValue, String defaultValue);
/**
* 根据字典值获取字典标签(多个值用逗号隔开)
* @param dictType
* @param dictValues
* @param defaultValue
* @return
*/
public static String getDictLabels(String dictType, String dictValues, String defaultValue);
/**
* 根据标签获取字典值
* @param dictType
* @param dictLabel
* @param defaultValue
* @return
*/
public static String getDictValue(String dictType, String dictLabel, String defaultValue);
/**
* 根据标签获取字典值(多个值用逗号隔开)
* @param dictType
* @param dictLabels
* @param defaultValue
* @return
*/
public static String getDictValues(String dictType, String dictLabels, String defaultValue);
/**
* 返回字典列表
* @param dictType 字典类型,加 __all(双下划线+all) 后缀,则返回停用的字典 v4.2.0
* @return
*/
public static List<DictData> getDictList(String dictType);
/**
* 手动追加字典缓存
* @param dictType
* @param dictDatas
* @author ThinkGem
*/
public static void setDictList(String dictType, DictData... dictDatas);
/**
* 返回字典列表(JSON)
* @param type
* @return
*/
public static String getDictListJson(String dictType);
/**
* 清理缓存
*/
public static void clearDictCache();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 全局缓存 CacheUtils
/**
* 全局缓存工具类
* @author ThinkGem
*/
public class CacheUtils {
/**
* 获取缓存
* @param cacheName 缓存名称
* @param key 缓存键
*/
public static <V> V get(String cacheName, String key);
/**
* 获取缓存
* @param cacheName 缓存名称
* @param key 缓存键
* @param defaultValue 默认值
* @return
*/
public static <V> V get(String cacheName, String key, V defaultValue);
/**
* 获取缓存
* @param cacheName 缓存名称
* @param key 缓存键
* @param defaultValue 默认值
* @param timeToLiveInSeconds 自最后更新多长时间超期
* @return
*/
public static <V> V get(String cacheName, String key, V defaultValue, long timeToLiveInSeconds);
/**
* 写入缓存
* @param cacheName 缓存名称
* @param key 缓存键
* @param value 缓存值
*/
public static <V> void put(String cacheName, String key, V value);
/**
* 写入缓存
* @param cacheName 缓存名称
* @param key 缓存键
* @param value 缓存值
* @param timeToLiveInSeconds 自最后更新多长时间超期
*/
public static <V> void put(String cacheName, String key, V value, long timeToLiveInSeconds);
/**
* 从缓存中移除
* @param cacheName 缓存名称
* @param key 缓存键
*/
public static void remove(String cacheName, String key);
/**
* 根据key前缀从缓存中移除
* @param cacheName 缓存名称
* @param keyPrefixes 缓存键前缀
*/
public static void removeByKeyPrefix(String cacheName, String... keyPrefixes);
/**
* 获得一个Cache,没有则抛出异常。
*/
public static <K, V> org.apache.shiro.cache.Cache<K, V> getCache(String cacheName);
/**
* 清空缓存数据(清理缓存中的数据)
*/
public static void clearCache(String cacheName);
/**
* 移除缓存(删掉这个缓存名字)
*/
public static void removeCache(String cacheName);
/**
* 获得一个Cache,没有则抛出异常。
*/
public static Set<String> getCacheNames();
/**
* 清理 spring.cache.clearNames 指定的缓存(除会话缓存外的缓存)
*/
public static void clearCache();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 系统缓存 SysCacheUtils
/**
* 系统缓存工具类(v4.2开始从 CacheUtils 中分离出的 SysCache 缓存,防止无用,
* 该类仅用于操作 cacheName 为 sysCache 的缓存数据,而 CacheUtils 是操作全局缓存工具)
* @author ThinkGem
*/
public class SysUtils {
/**
* 获取缓存名称为SYS_CACHE内的值
* @param key 缓存键
*/
public static <V> V get(String key);
/**
* 获取缓存名称为SYS_CACHE内的值
* @param key 缓存键
* @param defaultValue 默认值
*/
public static <V> V get(String key, V defaultValue);
/**
* 写入缓存名称为SYS_CACHE内的值
* @param key 缓存键
* @param value 缓存值
*/
public static void put(String key, Object value);
/**
* 从缓存名称为SYS_CACHE中移除
* @param key 缓存键
*/
public static void remove(String key);
/**
* 根据key前缀从缓存名称为SYS_CACHE中移除
* @param keyPrefixes 缓存键前缀
*/
public static void removeByKeyPrefix(String... keyPrefixes);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 系统模块 ModuleUtils
/**
* 模块工具类
* @author ThinkGem
*/
public class ModuleUtils {
/**
* 根据编码获取模块
* @param moduleCode
* @return
*/
public static Module getModule(String moduleCode);
/**
* 根据编码获取模块列表
* @return
*/
public static Map<String, Module> getModuleList();
/**
* 获取开启的模块编号
*/
public static List<String> getEnableModuleCodes();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 全局配置 GlobalUtils
/**
* 全局配置类
* @author ThinkGem
*/
public class Global{
/**
* 显示/隐藏
*/
public static final String SHOW = "1";
public static final String HIDE = "0";
/**
* 是/否
*/
public static final String YES = "1";
public static final String NO = "0";
/**
* 对/错
*/
public static final String TRUE = "true";
public static final String FALSE = "false";
/**
* 操作
*/
public static final String OP_ADD = "add";
public static final String OP_EDIT = "edit";
public static final String OP_AUTH = "auth";
/**
* 视图页面中获取常量用: @see ${@Global.getConst('YES')}
* @param field 字段名,为 “Global.Fields”时返回所有字段的js对象。
*/
public static Object getConst(String field);
/**
* 获取配置文件中的值,取不到从System.getProperty获取,
* 仍取不到,则获取sys_config表中的值,仍然获取不到,返回空字符串。
* @return 获取不到,返回空字符串
*/
public static String getConfig(String key);
/**
* 获取配置文件中的值,取不到从System.getProperty获取,
* 仍取不到,则获取sys_config表中的值,仍然获取不到,返回默认值。
* @return 获取不到,返回defValue默认值
*/
public static String getConfig(String key, String defValue);
/**
* 获取配置文件中的值,取不到从System.getProperty获取,
* 仍取不到,则获取sys_config表中的值,仍然获取不到,返回默认值。
* @return 获取不到,返回defValue默认值
*/
public static Boolean getConfigToBoolean(String key, String defValue);
/**
* 获取配置文件中的值,取不到从System.getProperty获取,
* 仍取不到,则获取sys_config表中的值,仍然获取不到,返回默认值。
* @return 获取不到,返回defValue默认值
*/
public static Integer getConfigToInteger(String key, String defValue);
/**
* 获取配置文件中的值,取不到从System.getProperty获取,取不到,返回空。
* @return 获取不到,返回空
*/
public static String getProperty(String key);
/**
* 获取配置文件中的值,取不到从System.getProperty获取,取不到,返回空。
* @return 获取不到,返回空defValue默认值
*/
public static String getProperty(String key, String defValue);
/**
* 获取配置文件中的值,取不到从System.getProperty获取,取不到,返回空。
* @return 获取不到,返回空defValue默认值
*/
public static Boolean getPropertyToBoolean(String key, String defValue);
/**
* 获取配置文件中的值,取不到从System.getProperty获取,取不到,返回空。
* @return 获取不到,返回空defValue默认值
*/
public static Integer getPropertyToInteger(String key, String defValue);
/**
* 清理配置缓存(同时会重新加载properties文件)
*/
public static void clearCache();
/**
* 获取国际化语言名
*/
public static String getLang();
/**
* 设置国际化语言名
*/
public static void setLang(String lang, HttpServletRequest request, HttpServletResponse response);
/**
* 获取国际化语言译文
*/
public static String getText(String code, String... params);
/**
* 获取管理端根路径(返回 yml 里配置的 adminPath)
*/
public static String getAdminPath();
/**
* 获取前端根路径(返回 yml 里配置的 frontPath)
*/
public static String getFrontPath();
/**
* 获取当前数据库类型(返回 yml 里配置的数据库类型 jdbc.type)
*/
public static String getJdbcType();
/**
* 获取当前数据库名称(如果数据库类型为dameng,则返回oracle)
* @return oracle(dameng、kingbase、oscar)、mysql(mariadb)、mssql(mssql2012)、postgresql(highgo)
*/
public static String getDbName();
/**
* 获取当前数据库连接信息
* @param key 参数名(type、driver、url、username)
* @return 数据库连接信息
*/
public static String getJdbcInfo(String key);
/**
* 获取表前缀(返回 yml 里配置的 jdbc.tablePrefix)
*/
public static String getTablePrefix();
/**
* 获取上传文件的根目录
* @param path 相对的路径
* @return
*/
public static String getUserfilesBaseDir(String path);
/**
* 是否使用多租户模式
*/
public static Boolean isUseCorpModel();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# 加密解密
实现 AES、DES、SHA-1、MD5 等加密算法
# 加密参数
# 加密设置(v5.8.1)
encrypt:
# 默认秘钥,可通过 AesUtils.genKeyString() 生成新秘钥 Hex 编码(建议上线前修改秘钥)
defaultKey: 9f58a20946b47e190003ec716c1c457d
1
2
3
4
2
3
4
# 对称加密
String s = "Hello word! 你好,中文!";
System.out.println(s);
// 生成秘钥
String k = AesUtils.genKeyString();
System.out.println(k);
// 加密,如果不传递 k 秘钥,则使用 encrypt.defaultKey 默认秘钥
String s1 = AesUtils.encode(s, k);
System.out.println(s1);
// 解密,如果不传递 k 秘钥,则使用 encrypt.defaultKey 默认秘钥
String s2 = AesUtils.decode(s1, k);
System.out.println(s2);
// 使用 IV 进行加密解密
byte[] key = AesUtils.genKey();
byte[] iv = AesUtils.genIV();
byte[] data = AesUtils.encode(s.getBytes(StandardCharsets.UTF_8), key, iv);
System.out.println(EncodeUtils.encodeHex(data));
byte[] data2 = AesUtils.decode(data, key, iv);
System.out.println(new String(data2, StandardCharsets.UTF_8));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 散列加密,不可逆加密
String s = "Hello word! 你好,中文!";
System.out.println(s);
// 加密
String d = Sha1Utils.sha1(s);
System.out.println(d);
// 带盐加密
String salt = Sha1Utils.genSaltString(8);
System.out.println(salt);
String data = Sha1Utils.sha1(s, salt);
System.out.println(data);
// MD5 加密
String md5 = Md5Utils.md5(s);
System.out.println(md5);
// MD5 加密,增加迭代次数
String md5b = Md5Utils.md5(s, 5);
System.out.println(md5b);
// 获取文件的 MD5 值,还可以获取前后 10M 的 MD5 值,加快计算速度
String md5c = Md5Utils.md5File(file, 10 * 1024 * 1024);
System.out.println(md5c);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 加密解密(国密)
实现 SM2、SM3、SM4 加密算法
# 加密参数
# 加密设置(v5.8.1)
encrypt:
# 默认秘钥,可通过 SM4Utils.genKeyString() 生成新秘钥 Hex 编码(建议上线前修改秘钥)
defaultKey: 9f58a20946b47e190003ec716c1c457d
# 是否使用国密 SM 算法(SHA-1 替换为 SM3、AES 替换为 SM4)
smAlgorithm: true
# 对称或非对称加密是否使用 Base64 存储,默认 Hex 存储
storeBase64: true
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 对称加密
String s = "Hello word! 你好,中文!";
System.out.println(s);
// 生成秘钥
String k = SM4Utils.genKeyString();
System.out.println(k);
// 加密,如果不传递 k 秘钥,则使用 encrypt.defaultKey 默认秘钥
String s1 = SM4Utils.encode(s, k);
System.out.println(s1);
// 解密,如果不传递 k 秘钥,则使用 encrypt.defaultKey 默认秘钥
String s2 = SM4Utils.decode(s1, k);
System.out.println(s2);
// 使用 IV 进行加密解密
byte[] key = SM4Utils.genKey();
byte[] iv = SM4Utils.genIV();
byte[] data = SM4Utils.encode(s.getBytes(StandardCharsets.UTF_8), key, iv);
System.out.println(EncodeUtils.encodeBase64(data));
byte[] data2 = SM4Utils.decode(data, key, iv);
System.out.println(new String(data2, StandardCharsets.UTF_8));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 散列加密,不可逆加密
String s = "Hello word! 你好,中文!";
System.out.println(s);
// 加密,使用 encrypt.defaultKey 默认秘钥
String s1 = SM3Utils.sm3(s);
System.out.println(s1);
// 生成 Key
String key = SM3Utils.genSaltString(8);
System.out.println(key);
// 加密,自定义 Key
String s3 = SM3Utils.sm3(s, key);
System.out.println(s3);
// 解密,自定义 Key
String s4 = SM3Utils.hmacSm3(s, key);
System.out.println(s4);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 非对称加密,公钥,秘钥
String s = "Hello word! 你好,中文!";
System.out.println(s);
// 生成密钥对(公钥、私钥)
String[] keys = SM2Utils.genKeys();
System.out.println("公钥:" + keys[0]);
PublicKey publicKey = SM2Utils.toPublicKey(keys[0]);
System.out.println("私钥:" + keys[1]);
PrivateKey privateKey = SM2Utils.toPrivateKey(keys[1]);
// 公钥加密(客户端用)
byte[] data = SM2Utils.encode(s.getBytes(), publicKey);
String dataString = EncodeUtils.encodeBase64(data);
System.out.println("加密数据:" + dataString);
// 私钥解密(服务端用)
byte[] data2 = SM2Utils.decode(data, privateKey);
String dataString2 = new String(data2, StandardCharsets.UTF_8);
System.out.println("解密数据:" + dataString2);
// 数据签名(生成签名)
byte[] sign = SM2Utils.sign(s.getBytes(), privateKey);
System.out.println("数据签名:" + EncodeUtils.encodeBase64(sign));
// 数据验签(根据公钥和签名进行校验数据是否被篡改)
boolean b = SM2Utils.verify(s.getBytes(), publicKey, sign);
System.out.println("数据验签:" + b);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27