Commit c49817a2 c49817a2775baa55954f5bd60cb7c11800be8272 by 文鑫

获取用户信息接口调整

1 parent 33ef2583
...@@ -18,7 +18,16 @@ ...@@ -18,7 +18,16 @@
18 <groupId>org.springframework.boot</groupId> 18 <groupId>org.springframework.boot</groupId>
19 <artifactId>spring-boot-starter-web</artifactId> 19 <artifactId>spring-boot-starter-web</artifactId>
20 </dependency> 20 </dependency>
21 21 <dependency>
22 <groupId>com.dtflys.forest</groupId>
23 <artifactId>forest-spring-boot-starter</artifactId>
24 <version>1.5.36</version>
25 </dependency>
26 <dependency>
27 <groupId>cn.hutool</groupId>
28 <artifactId>hutool-all</artifactId>
29 <version>5.8.26</version>
30 </dependency>
22 <dependency> 31 <dependency>
23 <groupId>org.projectlombok</groupId> 32 <groupId>org.projectlombok</groupId>
24 <artifactId>lombok</artifactId> 33 <artifactId>lombok</artifactId>
......
1 package com.topdraw.dockingapi; 1 package com.topdraw.dockingapi;
2 2
3 import com.dtflys.forest.springboot.annotation.ForestScan;
3 import lombok.extern.slf4j.Slf4j; 4 import lombok.extern.slf4j.Slf4j;
4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.SpringApplication;
5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 import org.springframework.boot.autoconfigure.SpringBootApplication;
6 7
7 @SpringBootApplication 8 @SpringBootApplication
8 @Slf4j 9 @Slf4j
10 @ForestScan("com.topdraw.dockingapi.http")
9 public class DockingApiApplication { 11 public class DockingApiApplication {
10 12
11 public static void main(String[] args) { 13 public static void main(String[] args) {
......
1 package com.topdraw.dockingapi.config;
2
3 import cn.hutool.core.bean.BeanUtil;
4 import cn.hutool.core.util.StrUtil;
5 import com.alibaba.fastjson.JSON;
6 import com.alibaba.fastjson.JSONObject;
7 import com.dtflys.forest.annotation.MethodLifeCycle;
8 import com.dtflys.forest.annotation.RequestAttributes;
9 import com.dtflys.forest.http.ForestRequest;
10 import com.dtflys.forest.http.ForestResponse;
11 import com.dtflys.forest.lifecycles.MethodAnnotationLifeCycle;
12 import com.dtflys.forest.reflection.ForestMethod;
13 import com.topdraw.dockingapi.util.DecryptUtils;
14 import lombok.SneakyThrows;
15
16 import java.lang.annotation.*;
17
18 /**
19 * @author wenxin
20 * @version 1.0
21 * @date 2024/5/23 下午5:45
22 */
23 @Documented
24 @MethodLifeCycle(Decode.DecodeLifeCycle.class)
25 @RequestAttributes
26 @Retention(RetentionPolicy.RUNTIME)
27 @Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
28 public @interface Decode {
29
30 String value();
31
32 class DecodeLifeCycle implements MethodAnnotationLifeCycle<Decode, Object> {
33 private String key;
34
35 @Override
36 public void onMethodInitialized(ForestMethod method, Decode annotation) {
37 this.key = annotation.value();
38 }
39
40 @SneakyThrows
41 @Override
42 public void onSuccess(Object data, ForestRequest request, ForestResponse response) {
43 String value = (String) getAttribute(request, "value");
44 String content = response.getContent();
45 ForestMethod<?> method = request.getMethod();
46 Class<?> returnClass = method.getReturnClass();
47 JSONObject responseData = JSON.parseObject(content, JSONObject.class);
48 if (StrUtil.isNotBlank(responseData.getString("errcode"))) {
49 data = BeanUtil.copyProperties(responseData, returnClass);
50 } else {
51 String encrypt = responseData.getString("encrypt");
52 String bodyJson = DecryptUtils.decode(value, encrypt);
53 data = BeanUtil.copyProperties(JSONObject.parseObject(bodyJson), returnClass);
54 }
55 response.setResult(data);
56 }
57 }
58 }
1 package com.topdraw.dockingapi.config;
2
3 import com.alibaba.fastjson.JSON;
4 import com.dtflys.forest.annotation.MethodLifeCycle;
5 import com.dtflys.forest.annotation.RequestAttributes;
6 import com.dtflys.forest.http.ForestBody;
7 import com.dtflys.forest.http.ForestRequest;
8 import com.dtflys.forest.lifecycles.MethodAnnotationLifeCycle;
9 import com.dtflys.forest.reflection.ForestMethod;
10 import com.topdraw.dockingapi.entity.EncryptEntity;
11 import com.topdraw.dockingapi.util.DecryptUtils;
12 import lombok.SneakyThrows;
13
14 import java.lang.annotation.*;
15 import java.lang.reflect.Parameter;
16
17 /**
18 * 用Forest自定义注解实现一个自定义的签名加密注解
19 * 凡用此接口修饰的方法或接口,其对应的所有请求都会执行自定义的签名加密过程
20 * 而自定义的签名加密过程,由这里的@MethodLifeCycle注解指定的生命周期类进行处理
21 * 可以将此注解用在接口类和方法上
22 */
23 @Documented
24 @MethodLifeCycle(Encode.EncodeLifeCycle.class)
25 @RequestAttributes
26 @Retention(RetentionPolicy.RUNTIME)
27 @Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
28 public @interface Encode {
29
30 String value() default "";
31
32
33 class EncodeLifeCycle implements MethodAnnotationLifeCycle<Encode, Object> {
34
35
36 /**
37 * 当方法调用时调用此方法,此时还没有执行请求发送
38 * 此方法可以获得请求对应的方法调用信息,以及动态传入的方法调用参数列表
39 */
40 @SneakyThrows
41 @Override
42 public void onInvokeMethod(ForestRequest request, ForestMethod method, Object[] args) {
43 String value = (String) getAttribute(request, "value");
44 for (Object arg : args) {
45 Parameter[] parameters = method.getMethod().getParameters();
46 for (int i = 0; i < parameters.length; i++) {
47 Encode annotation = parameters[i].getAnnotation(Encode.class);
48 if (annotation != null) {
49 Object body = args[i];
50 String jsonString = JSON.toJSONString(body);
51 String encode = DecryptUtils.encode(value, jsonString);
52 EncryptEntity encodeBody = new EncryptEntity(encode);
53 ForestBody forestBody = request.getBody();
54 //替换body
55 forestBody.clear();
56 request.addBody(encodeBody);
57 }
58 }
59 }
60 }
61
62
63 @Override
64 public void onMethodInitialized(ForestMethod method, Encode annotation) {
65
66 }
67 }
68
69
70 }
71
1 package com.topdraw.dockingapi.controller; 1 package com.topdraw.dockingapi.controller;
2 2
3 import cn.hutool.core.map.MapBuilder;
3 import com.alibaba.fastjson.JSONArray; 4 import com.alibaba.fastjson.JSONArray;
4 import com.alibaba.fastjson.JSONObject; 5 import com.alibaba.fastjson.JSONObject;
5 import com.digital.szzz.gateway.sdk.api.GatewaySender; 6 import com.digital.szzz.gateway.sdk.api.GatewaySender;
6 import com.digital.szzz.gateway.sdk.bean.GatewayResponse; 7 import com.digital.szzz.gateway.sdk.bean.GatewayResponse;
7 import com.topdraw.dockingapi.config.EnvConfiguration; 8 import com.topdraw.dockingapi.config.EnvConfiguration;
9 import com.topdraw.dockingapi.entity.DecodeBody;
10 import com.topdraw.dockingapi.http.UserService;
8 import lombok.RequiredArgsConstructor; 11 import lombok.RequiredArgsConstructor;
9 import lombok.extern.slf4j.Slf4j; 12 import lombok.extern.slf4j.Slf4j;
10 import org.springframework.web.bind.annotation.*; 13 import org.springframework.web.bind.annotation.*;
...@@ -12,9 +15,11 @@ import org.springframework.web.bind.annotation.*; ...@@ -12,9 +15,11 @@ import org.springframework.web.bind.annotation.*;
12 import javax.annotation.PostConstruct; 15 import javax.annotation.PostConstruct;
13 import java.util.HashMap; 16 import java.util.HashMap;
14 import java.util.Map; 17 import java.util.Map;
18 import java.util.Optional;
15 19
16 /** 20 /**
17 * 对接愉快办接口 21 * 对接愉快办接口
22 *
18 * @author wenxin 23 * @author wenxin
19 * @version 1.0 24 * @version 1.0
20 * @date 2024/5/9 下午5:46 25 * @date 2024/5/9 下午5:46
...@@ -27,6 +32,8 @@ import java.util.Map; ...@@ -27,6 +32,8 @@ import java.util.Map;
27 public class ApiController { 32 public class ApiController {
28 private final EnvConfiguration configuration; 33 private final EnvConfiguration configuration;
29 34
35 private final UserService userService;
36
30 String url; 37 String url;
31 String appId; 38 String appId;
32 String iv; 39 String iv;
...@@ -46,6 +53,7 @@ public class ApiController { ...@@ -46,6 +53,7 @@ public class ApiController {
46 53
47 /** 54 /**
48 * 获取jsToken 55 * 获取jsToken
56 *
49 * @return token信息 57 * @return token信息
50 */ 58 */
51 @PostMapping("/js/token") 59 @PostMapping("/js/token")
...@@ -55,11 +63,15 @@ public class ApiController { ...@@ -55,11 +63,15 @@ public class ApiController {
55 JSONObject param = new JSONObject(); 63 JSONObject param = new JSONObject();
56 param.put("appId", appId); 64 param.put("appId", appId);
57 Map<String, String> headerMap = new HashMap<>(); 65 Map<String, String> headerMap = new HashMap<>();
58 return GatewaySender.send(url, appId, method, iv, appKey, appSecretKey, param, authCode, headerMap, readTimeout, connTimeout); 66 return GatewaySender.send(url, appId, method,
67 iv, appKey, appSecretKey,
68 param, authCode, headerMap,
69 readTimeout, connTimeout);
59 } 70 }
60 71
61 /** 72 /**
62 * 获取authCode 73 * 获取authCode
74 *
63 * @param data 用户id 75 * @param data 用户id
64 * @return authCode信息 76 * @return authCode信息
65 */ 77 */
...@@ -72,21 +84,46 @@ public class ApiController { ...@@ -72,21 +84,46 @@ public class ApiController {
72 param.put("userId", userId); 84 param.put("userId", userId);
73 param.put("forceScopes", new JSONArray().fluentAdd("ykb_user_info").fluentAdd("ykb_divide")); 85 param.put("forceScopes", new JSONArray().fluentAdd("ykb_user_info").fluentAdd("ykb_divide"));
74 Map<String, String> headerMap = new HashMap<>(); 86 Map<String, String> headerMap = new HashMap<>();
75 return GatewaySender.send(url, appId, method, iv, appKey, appSecretKey, param, "", headerMap, readTimeout, connTimeout); 87 return GatewaySender.send(url, appId, method,
88 iv, appKey, appSecretKey,
89 param, "", headerMap,
90 readTimeout, connTimeout);
76 } 91 }
77 92
78 /** 93 /**
79 * 获取用户脱敏信息 94 * 获取用户脱敏信息
95 *
80 * @param data 认证code 96 * @param data 认证code
81 * @return 用户信息 97 * @return 用户信息
82 */ 98 */
83 @PostMapping("/user/info") 99 @PostMapping("/user/info")
84 public GatewayResponse getUserInfoByAuthCode(@RequestBody JSONObject data) { 100 public DecodeBody<Object> getUserInfoByAuthCode(@RequestBody JSONObject data) {
85 String method = "app.ykb.uc.oauth.userInfo"; 101 //通过authCode获取用户手机号
86 JSONObject param = new JSONObject(); 102 JSONObject userInfoByAuthCode = userService.getUserInfoByAuthCode(data);
87 String authCode = data.getString("authCode"); 103 String phone = Optional.ofNullable(userInfoByAuthCode)
88 param.put("authCode", authCode); 104 .map(t -> t.getJSONObject("data"))
89 Map<String, String> headerMap = new HashMap<>(); 105 .map(t -> t.getJSONObject("userInfo"))
90 return GatewaySender.send(url, appId, method, iv, appKey, appSecretKey, param, authCode, headerMap, readTimeout, connTimeout); 106 .map(t -> t.getString("phone"))
107 .orElseThrow(() -> new RuntimeException("获取用户信息失败"));
108 //判断手机号是否已经注册
109 DecodeBody<JSONObject> register = userService.checkIsRegisterByPhoneNum(MapBuilder.<String, String>create()
110 .put("phone", phone).build());
111 String isRegister = register.getData().getString("isRegister");
112 if ("0".equals(isRegister)) {
113 //注册用户
114 DecodeBody<Object> body = userService.privateRegister(MapBuilder.<String, String>create()
115 .put("phone", phone)
116 .put("token", "")
117 .build());
118 String errcode = body.getErrcode();
119 if (!"0".equals(errcode)) {
120 //注册失败直接返回失败信息
121 return body;
122 }
123 }
124 //获取用户信息
125 return userService.privateLogin(MapBuilder.<String, String>create()
126 .put("phone", phone)
127 .put("token", "").build());
91 } 128 }
92 } 129 }
......
1 package com.topdraw.dockingapi.entity;
2
3 import lombok.Data;
4
5 /**
6 * @author wenxin
7 * @version 1.0
8 * @date 2024/5/23 下午5:57
9 */
10 @Data
11 public class DecodeBody<T> {
12
13 private String errcode;
14
15 private String errmsg;
16
17 private T data;
18 }
1 package com.topdraw.dockingapi.entity;
2
3 import lombok.AllArgsConstructor;
4 import lombok.Data;
5 import lombok.NoArgsConstructor;
6 import lombok.experimental.Accessors;
7
8 /**
9 * @author wenxin
10 * @version 1.0
11 * @date 2024/5/23 下午5:24
12 */
13 @Data
14 @NoArgsConstructor
15 @AllArgsConstructor
16 @Accessors(chain = true)
17 public class EncryptEntity {
18
19 private String encrypt;
20
21 }
1 package com.topdraw.dockingapi.http;
2
3 import com.alibaba.fastjson.JSONObject;
4 import com.dtflys.forest.annotation.BaseRequest;
5 import com.dtflys.forest.annotation.Body;
6 import com.dtflys.forest.annotation.Post;
7 import com.topdraw.dockingapi.config.Decode;
8 import com.topdraw.dockingapi.config.Encode;
9 import com.topdraw.dockingapi.entity.DecodeBody;
10
11 import java.util.Map;
12
13 /**
14 * @author wenxin
15 * @version 1.0
16 * @date 2024/5/23 下午4:36
17 */
18 @BaseRequest(
19 baseURL = "{baseUrl}", // 默认域名
20 headers = {
21 "Content-Type:application/json" // 默认请求头
22 },
23 sslProtocol = "TLS" // 默认单向SSL协议
24 )
25 public interface UserService {
26 /**
27 * 检查指定手机号是否注册
28 * 请求体明文
29 * {
30 * "phoneNum": "15211111111"
31 * }
32 *
33 * @param body 密文 key是encrypt value是加密以后的密码
34 * @return isRegister(是否已注册,0:未注册;1:已注册)
35 */
36 @Post("/cpc-ms-service-user/user/yk/checkIsRegisterByPhoneNum")
37 @Encode("${key}")
38 @Decode("${key}")
39 DecodeBody<JSONObject> checkIsRegisterByPhoneNum(@Body @Encode Map<String,?> body);
40
41 /**
42 * 用户注册
43 * 请求体明文
44 * {
45 * "phoneNum":"15211111111",
46 * "token":"333333333"
47 * }
48 *
49 * @param body 密文 key是encrypt value是加密以后的密码
50 * @return errcode(错误代码,0:成功;非0:失败)
51 */
52 @Post("/cpc-ms-service-user/user/yk/privateRegister")
53 @Encode("${key}")
54 @Decode("${key}")
55 DecodeBody<Object> privateRegister(@Body @Encode Map<String,?> body);
56
57 /**
58 * 用户登录获取用户信息
59 * 请求体明文
60 * {
61 * "phoneNum":"15211111111",
62 * "token":"2313123123"
63 * }
64 *
65 * @param body 密文 key是encrypt value是加密以后的密码
66 * @return 用户信息
67 */
68 @Post("/cpc-ms-service-user/login/yk/privateLogin")
69 @Encode("${key}")
70 @Decode("${key}")
71 DecodeBody<Object> privateLogin(@Body @Encode Map<String,?> body);
72
73
74 /**
75 * 获取用户手机号码
76 *
77 * @param body authCode
78 * @return 手机号
79 */
80 @Post("/cpc-ms-service-user/user/yk/getUserInfoByAuthCode")
81 JSONObject getUserInfoByAuthCode(@Body JSONObject body);
82
83
84 }
1 package com.topdraw.dockingapi.util;
2
3 import org.apache.commons.codec.binary.Base64;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6
7 import javax.crypto.Cipher;
8 import javax.crypto.SecretKeyFactory;
9 import javax.crypto.spec.DESKeySpec;
10 import java.security.Key;
11
12 /**
13 * 加解密工具
14 *
15 * @author chenwl
16 * @date 2020-11-08 12:36:47
17 */
18 public abstract class DecryptUtils {
19
20 private static final Logger log = LoggerFactory.getLogger(DecryptUtils.class);
21 private static final String TRANSFORMATION_DES = "DES/ECB/PKCS5Padding";
22 private static final String ALGORITHM_DES = "DES";
23
24 /**
25 * DES 加密
26 *
27 * @param key 密钥,长度不能够小于8位字节
28 * @param plainText 明文
29 * @return 密文
30 */
31 public static String encode(String key, String plainText) throws Exception {
32 return encode(key, plainText.getBytes());
33 }
34
35 /**
36 * DES 加密
37 *
38 * @param key 密钥,长度不能够小于8位字节
39 * @param plainBytes 明文字节数组
40 * @return 密文
41 */
42 public static String encode(String key, byte[] plainBytes) throws Exception {
43 DESKeySpec dks = new DESKeySpec(key.getBytes());
44 SecretKeyFactory skf = SecretKeyFactory.getInstance(ALGORITHM_DES);
45 Key secretKey = skf.generateSecret(dks);
46 Cipher cipher = Cipher.getInstance(TRANSFORMATION_DES);
47 cipher.init(Cipher.ENCRYPT_MODE, secretKey);
48 byte[] bytes = cipher.doFinal(plainBytes);
49 return new String(Base64.encodeBase64(bytes));
50 }
51
52 /**
53 * 解密
54 *
55 * @param key 密钥,长度不能够小于8位字节
56 * @param cipherText 密文
57 * @return 明文
58 */
59 public static String decode(String key, String cipherText) throws Exception {
60 return decode(key, cipherText.getBytes());
61 }
62
63 /**
64 * DES 解密
65 *
66 * @param key 密钥,长度不能够小于8位字节
67 * @param cipherBytes 密文字节数组
68 * @return 明文
69 */
70 private static String decode(String key, byte[] cipherBytes) throws Exception {
71 DESKeySpec dks = new DESKeySpec(key.getBytes());
72 SecretKeyFactory skf = SecretKeyFactory.getInstance(ALGORITHM_DES);
73 Key secretKey = skf.generateSecret(dks);
74 Cipher cipher = Cipher.getInstance(TRANSFORMATION_DES);
75 cipher.init(Cipher.DECRYPT_MODE, secretKey);
76 return new String(cipher.doFinal(Base64.decodeBase64(cipherBytes)));
77 }
78
79
80 }
1 package com.topdraw.dockingapi.util;
2
3 /**
4 * @author wenxin
5 * @version 1.0
6 * @date 2024/5/23 下午5:00
7 */
8 public class DesUtil {
9 }
...@@ -4,4 +4,11 @@ interface: ...@@ -4,4 +4,11 @@ interface:
4 appIv: kfalxHTE3Np6PbQbbZhLnA== 4 appIv: kfalxHTE3Np6PbQbbZhLnA==
5 appKey: Rd+oZa5bYfhiNK9O0dc0ng== 5 appKey: Rd+oZa5bYfhiNK9O0dc0ng==
6 appSecret: x6en8WE3 6 appSecret: x6en8WE3
7 url: http://23.210.52.243:44207/gateway/open/api/do
...\ No newline at end of file ...\ No newline at end of file
7 url: http://23.210.52.243:44207/gateway/open/api/do
8
9 forest:
10 variables:
11 baseUrl: https://cpcapi.cbg.cn/
12 key: wmsj2021
13 server:
14 port: 7078
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -4,4 +4,10 @@ interface: ...@@ -4,4 +4,10 @@ interface:
4 appIv: ynDi62eQ8WKQtZhUMUqTmQ== 4 appIv: ynDi62eQ8WKQtZhUMUqTmQ==
5 appKey: y4pBvyDY8cgSNsxukn0DlQ== 5 appKey: y4pBvyDY8cgSNsxukn0DlQ==
6 appSecret: 04t5li0m 6 appSecret: 04t5li0m
7 url: https://ykbapp-test.cqdcg.com:1443/gateway/open/api/do
...\ No newline at end of file ...\ No newline at end of file
7 url: https://ykbapp-test.cqdcg.com:1443/gateway/open/api/do
8 forest:
9 variables:
10 baseUrl: https://cpcapi.cbg.cn/
11 key: wmsj2021
12 server:
13 port: 7077
...\ No newline at end of file ...\ No newline at end of file
......
1 # 应用服务 WEB 访问端口 1
2 server.port=7078
3 # 指定启动的时候springboot的激活环境 2 # 指定启动的时候springboot的激活环境
4 spring.profiles.active=test 3 spring.profiles.active=test
5
......
1 forest:
2 backend: okhttp3 # 后端HTTP框架(默认为 okhttp3)
3 max-connections: 1000 # 连接池最大连接数(默认为 500)
4 max-route-connections: 500 # 每个路由的最大连接数(默认为 500)
5 max-request-queue-size: 100 # [自v1.5.22版本起可用] 最大请求等待队列大小
6 max-async-thread-size: 300 # [自v1.5.21版本起可用] 最大异步线程数
7 max-async-queue-size: 16 # [自v1.5.22版本起可用] 最大异步线程池队列大小
8 timeout: 3000 # [已不推荐使用] 请求超时时间,单位为毫秒(默认为 3000)
9 connect-timeout: 3000 # 连接超时时间,单位为毫秒(默认为 timeout)
10 read-timeout: 3000 # 数据读取超时时间,单位为毫秒(默认为 timeout)
11 max-retry-count: 0 # 请求失败后重试次数(默认为 0 次不重试)
12 ssl-protocol: TLS # 单向验证的HTTPS的默认TLS协议(默认为 TLS)
13 log-enabled: true # 打开或关闭日志(默认为 true)
14 log-request: true # 打开/关闭Forest请求日志(默认为 true)
15 log-response-status: true # 打开/关闭Forest响应状态日志(默认为 true)
16 log-response-content: true # 打开/关闭Forest响应内容日志(默认为 false)
17 async-mode: platform # [自v1.5.27版本起可用] 异步模式(默认为 platform)
18 variables:
19 userInfoUrl: https://cpcapi.cbg.cn
...\ No newline at end of file ...\ No newline at end of file
1 package com.topdraw.dockingapi;
2
3 import com.topdraw.dockingapi.util.DecryptUtils;
4 import lombok.SneakyThrows;
5 import org.bouncycastle.jce.provider.BouncyCastleProvider;
6 import org.junit.jupiter.api.Test;
7
8 import javax.crypto.Cipher;
9 import javax.crypto.spec.SecretKeySpec;
10 import java.nio.charset.StandardCharsets;
11 import java.security.Security;
12
13 /**
14 * @author wenxin
15 * @version 1.0
16 * @date 2024/5/23 下午4:40
17 */
18 public class ApiTest {
19
20
21 @Test
22 public void testMain() throws Exception {
23 // 添加BouncyCastle提供者
24 Security.addProvider(new BouncyCastleProvider());
25 // 密钥
26 byte[] keyBytes = "wmsj2021".getBytes(StandardCharsets.UTF_8); // DES密钥长度为8字节
27 // 需要加密的数据
28 String text = "{\"phoneNum\":\"15983678047\"}";
29 byte[] data = text.getBytes(StandardCharsets.UTF_8);
30 // 创建密钥
31 SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "DES");
32 // 创建Cipher实例
33 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS7Padding", "BC");
34 // 初始化Cipher
35 cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
36 // 执行加密
37 byte[] encryptedData = cipher.doFinal(data);
38 // 打印加密结果(通常加密后的数据进行Base64编码或者十六进制编码显示)
39 System.out.println("Encrypted Data: " + bytesToHex(encryptedData));
40 }
41
42 // 将字节转换为十六进制字符串
43 public static String bytesToHex(byte[] bytes) {
44 StringBuilder hexString = new StringBuilder();
45 for (byte b : bytes) {
46 String hex = Integer.toHexString(0xff & b);
47 if (hex.length() == 1) hexString.append('0');
48 hexString.append(hex);
49 }
50 return hexString.toString();
51 }
52
53 @SneakyThrows
54 @Test
55 public void testEncode(){
56 String text = "{\"phoneNum\":\"15983678047\"}";
57 System.out.println(DecryptUtils.encode("wmsj2021", text));
58 String tt="U0ELEkckqqxwzutWXbySgJmGbWQovd9n7UZSWqYt5HpXOxOsQwTnrjGp7geAhD/Mp9Jy3okXkRtt0cuFDdlMjPDgsBK3SMu0";
59 System.out.println(DecryptUtils.decode("wmsj2021", tt));
60 }
61 }
1 package com.topdraw.dockingapi; 1 package com.topdraw.dockingapi;
2 2
3 import com.alibaba.fastjson.JSONObject;
4 import com.topdraw.dockingapi.http.UserService;
3 import org.junit.jupiter.api.Test; 5 import org.junit.jupiter.api.Test;
4 import org.springframework.boot.test.context.SpringBootTest; 6 import org.springframework.boot.test.context.SpringBootTest;
5 7
8 import javax.annotation.Resource;
9
6 @SpringBootTest 10 @SpringBootTest
7 class DockingApiApplicationTests { 11 class DockingApiApplicationTests {
8 12
13 @Resource
14 private UserService userService;
15
9 @Test 16 @Test
10 void contextLoads() { 17 void contextLoads() {
18 JSONObject param = new JSONObject();
19 param.put("phoneNum","15636524584");
20 System.out.println(userService.checkIsRegisterByPhoneNum(param));
11 } 21 }
12 22
13 } 23 }
......