Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
smart_gov_platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
smart_gov_platform
Commits
f0fd6959
Commit
f0fd6959
authored
Mar 01, 2024
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加国密4加解密接口
parent
20bfcbd5
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
661 additions
and
5 deletions
+661
-5
base-manager/db/add.sql
base-manager/db/add.sql
+9
-0
base-manager/src/main/java/com/mortals/xhx/busiz/message/MessageService.java
...in/java/com/mortals/xhx/busiz/message/MessageService.java
+15
-0
base-manager/src/main/java/com/mortals/xhx/busiz/message/impl/MessageServiceImpl.java
...om/mortals/xhx/busiz/message/impl/MessageServiceImpl.java
+311
-0
base-manager/src/main/java/com/mortals/xhx/busiz/req/ApiReq.java
...nager/src/main/java/com/mortals/xhx/busiz/req/ApiReq.java
+23
-0
base-manager/src/main/java/com/mortals/xhx/busiz/req/MessageReq.java
...r/src/main/java/com/mortals/xhx/busiz/req/MessageReq.java
+49
-0
base-manager/src/main/java/com/mortals/xhx/busiz/req/PayApiRequestEntityVO.java
...java/com/mortals/xhx/busiz/req/PayApiRequestEntityVO.java
+30
-0
base-manager/src/main/java/com/mortals/xhx/busiz/rsp/ApiResp.java
...ager/src/main/java/com/mortals/xhx/busiz/rsp/ApiResp.java
+23
-0
base-manager/src/main/java/com/mortals/xhx/busiz/rsp/MessageResp.java
.../src/main/java/com/mortals/xhx/busiz/rsp/MessageResp.java
+19
-0
base-manager/src/main/java/com/mortals/xhx/busiz/web/MidSignApiController.java
.../java/com/mortals/xhx/busiz/web/MidSignApiController.java
+0
-5
base-manager/src/main/java/com/mortals/xhx/busiz/web/SecurityApiController.java
...java/com/mortals/xhx/busiz/web/SecurityApiController.java
+178
-0
base-manager/src/test/java/com/mortals/httpclient/system/system.http
...r/src/test/java/com/mortals/httpclient/system/system.http
+4
-0
No files found.
base-manager/db/add.sql
View file @
f0fd6959
...
@@ -227,3 +227,12 @@ ALTER TABLE mortals_sys_site_matter ADD COLUMN `agent` tinyint(2) DEFAULT '
...
@@ -227,3 +227,12 @@ ALTER TABLE mortals_sys_site_matter ADD COLUMN `agent` tinyint(2) DEFAULT '
ALTER
TABLE
mortals_sys_site_matter
ADD
COLUMN
`agentName`
varchar
(
64
)
COMMENT
'代办姓名'
;
ALTER
TABLE
mortals_sys_site_matter
ADD
COLUMN
`agentName`
varchar
(
64
)
COMMENT
'代办姓名'
;
ALTER
TABLE
mortals_sys_site_matter
ADD
COLUMN
`agentPhone`
varchar
(
32
)
COMMENT
'代办电话'
;
ALTER
TABLE
mortals_sys_site_matter
ADD
COLUMN
`agentPhone`
varchar
(
32
)
COMMENT
'代办电话'
;
ALTER
TABLE
mortals_sys_site_matter
ADD
COLUMN
`agentPost`
varchar
(
64
)
COMMENT
'职务'
;
ALTER
TABLE
mortals_sys_site_matter
ADD
COLUMN
`agentPost`
varchar
(
64
)
COMMENT
'职务'
;
-- ----------------------------
2024
-
02
-
29
-- ----------------------------
UPDATE
mortals_sys_skin_base
SET
imageResolution
=
"1920x1080"
WHERE
imageResolution
=
"1"
;
UPDATE
mortals_sys_skin_base
SET
imageResolution
=
"1080x1920"
WHERE
imageResolution
=
"2"
;
UPDATE
mortals_sys_skin_base
SET
imageResolution
=
"1280x1280"
WHERE
imageResolution
=
"3"
;
\ No newline at end of file
base-manager/src/main/java/com/mortals/xhx/busiz/message/MessageService.java
0 → 100644
View file @
f0fd6959
package
com.mortals.xhx.busiz.message
;
import
com.mortals.xhx.busiz.req.MessageReq
;
import
com.mortals.xhx.busiz.rsp.MessageResp
;
public
interface
MessageService
{
MessageReq
decryptMessage
(
MessageReq
req
);
MessageReq
encryptMessage
(
MessageReq
req
);
MessageResp
signMessage
(
MessageReq
req
);
}
\ No newline at end of file
base-manager/src/main/java/com/mortals/xhx/busiz/message/impl/MessageServiceImpl.java
0 → 100644
View file @
f0fd6959
package
com.mortals.xhx.busiz.message.impl
;
import
cn.hutool.crypto.SmUtil
;
import
cn.hutool.crypto.asymmetric.SM2
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.xhx.busiz.message.MessageService
;
import
com.mortals.xhx.busiz.req.MessageReq
;
import
com.mortals.xhx.busiz.rsp.MessageResp
;
import
com.mortals.xhx.common.utils.RSAUtils
;
import
com.mortals.xhx.common.utils.ServicePlatformInvoker
;
import
lombok.extern.slf4j.Slf4j
;
import
org.bouncycastle.jce.provider.BouncyCastleProvider
;
import
org.springframework.http.*
;
import
org.springframework.lang.NonNull
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.Assert
;
import
org.springframework.util.LinkedMultiValueMap
;
import
org.springframework.util.MultiValueMap
;
import
org.springframework.web.client.RestTemplate
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.SecretKeySpec
;
import
java.nio.charset.StandardCharsets
;
import
java.security.AlgorithmParameters
;
import
java.security.Security
;
import
java.util.ArrayList
;
import
java.util.Base64
;
import
java.util.Collections
;
import
java.util.List
;
/**
* DeviceService
* 设备 service实现
*
* @author zxfei
* @date 2022-03-09
*/
@Service
(
"messageService"
)
@Slf4j
public
class
MessageServiceImpl
implements
MessageService
{
private
RestTemplate
restTemplate
=
new
RestTemplate
();
@Override
public
MessageReq
decryptMessage
(
MessageReq
req
)
{
if
(
"RSA"
.
equalsIgnoreCase
(
req
.
getAlgorithm
()))
{
String
decryptContent
=
RSAUtils
.
decode
(
req
.
getContent
(),
req
.
getPassword
());
MessageReq
messageReq
=
new
MessageReq
();
messageReq
.
setKey
(
req
.
getKey
());
messageReq
.
setDecryptContent
(
decryptContent
);
return
messageReq
;
}
else
if
(
"SM4"
.
equalsIgnoreCase
(
req
.
getAlgorithm
()))
{
String
decryptContent
=
null
;
try
{
decryptContent
=
decrypt
(
req
.
getKey
(),
req
.
getContent
());
}
catch
(
Exception
e
)
{
log
.
error
(
"异常"
,
e
);
throw
new
AppException
(
e
);
}
/* SM4 sm4 = SmUtil.sm4(req.getPassword().getBytes());
String decryptContent = sm4.decryptStr(req.getContent());*/
/* SM4Utils sm4Utils = new SM4Utils();
sm4Utils.setHexString(false);
sm4Utils.setSecretKey(req.getPassword());
log.info("password:{},secretKey:{},keybytes:{}",req.getPassword(),sm4Utils.getSecretKey(),sm4Utils.getSecretKey().getBytes());
String decryptContent = sm4Utils.decryptData_ECB(req.getContent());*/
MessageReq
messageReq
=
new
MessageReq
();
messageReq
.
setKey
(
req
.
getKey
());
messageReq
.
setDecryptContent
(
decryptContent
);
return
messageReq
;
}
else
if
(
"SM2"
.
equalsIgnoreCase
(
req
.
getAlgorithm
()))
{
/* SM2 sm2 = SmUtil.sm2();
byte[] sign = sm2.sign(req.getContent().getBytes(), req.getPassword().getBytes());
// SM2 sm2 = SmUtil.sm2(req.getPassword().getBytes());
// String decryptContent = sm4.decryptStr(req.getContent());
*//* SM4Utils sm4Utils = new SM4Utils();
sm4Utils.setHexString(false);
sm4Utils.setSecretKey(req.getPassword());
log.info("password:{},secretKey:{},keybytes:{}",req.getPassword(),sm4Utils.getSecretKey(),sm4Utils.getSecretKey().getBytes());
String decryptContent = sm4Utils.decryptData_ECB(req.getContent());*//*
MessageReq messageReq = new MessageReq();
messageReq.setKey(req.getKey());
messageReq.setDecryptContent(decryptContent);
return messageReq;*/
}
return
req
;
}
@Override
public
MessageReq
encryptMessage
(
MessageReq
req
)
{
MessageReq
messageReq
=
new
MessageReq
();
if
(
"RSA"
.
equalsIgnoreCase
(
req
.
getAlgorithm
()))
{
String
decryptContent
=
RSAUtils
.
decode
(
req
.
getContent
(),
req
.
getPassword
());
messageReq
.
setKey
(
req
.
getPassword
());
messageReq
.
setDecryptContent
(
decryptContent
);
return
messageReq
;
}
else
if
(
"SM4"
.
equalsIgnoreCase
(
req
.
getAlgorithm
()))
{
String
decryptContent
=
null
;
try
{
decryptContent
=
encryptSM4
(
req
.
getPassword
(),
req
.
getContent
());
}
catch
(
Exception
e
)
{
throw
new
AppException
(
"加密异常"
+
e
.
getMessage
());
}
messageReq
.
setKey
(
req
.
getKey
());
messageReq
.
setDecryptContent
(
decryptContent
);
return
messageReq
;
}
return
messageReq
;
}
public
String
encryptSM4
(
@NonNull
String
key
,
String
content
)
throws
Exception
{
Assert
.
hasText
(
key
,
"密钥不能为空"
);
if
(
content
==
null
)
{
return
null
;
}
Cipher
cipher
=
Cipher
.
getInstance
(
"SM4/ECB/PKCS7Padding"
,
new
BouncyCastleProvider
());
cipher
.
init
(
Cipher
.
ENCRYPT_MODE
,
new
SecretKeySpec
(
key
.
getBytes
(
StandardCharsets
.
UTF_8
),
"SM4"
),
(
AlgorithmParameters
)
null
);
return
Base64
.
getEncoder
().
encodeToString
(
cipher
.
doFinal
(
content
.
getBytes
(
StandardCharsets
.
UTF_8
)));
}
public
String
decrypt
(
@NonNull
String
key
,
String
encryptContent
)
throws
Exception
{
Assert
.
hasText
(
key
,
"密钥不能为空"
);
if
(
encryptContent
==
null
)
{
return
null
;
}
Cipher
cipher
=
null
;
cipher
=
Cipher
.
getInstance
(
"SM4/ECB/PKCS7Padding"
,
new
BouncyCastleProvider
());
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
new
SecretKeySpec
(
key
.
getBytes
(
StandardCharsets
.
UTF_8
),
"SM4"
),
(
AlgorithmParameters
)
null
);
return
new
String
(
cipher
.
doFinal
(
Base64
.
getDecoder
().
decode
(
encryptContent
)),
StandardCharsets
.
UTF_8
);
}
@Override
public
MessageResp
signMessage
(
MessageReq
req
)
{
MessageResp
messageResp
=
new
MessageResp
();
if
(
"RSA"
.
equalsIgnoreCase
(
req
.
getAlgorithm
()))
{
return
messageResp
;
}
else
if
(
"SM2"
.
equalsIgnoreCase
(
req
.
getAlgorithm
()))
{
String
content
=
req
.
getContent
();
JSONObject
jsonObject
=
JSON
.
parseObject
(
content
);
String
access_key
=
jsonObject
.
getString
(
"access_key"
);
String
biz_content
=
jsonObject
.
getString
(
"biz_content"
);
String
format
=
jsonObject
.
getString
(
"format"
);
String
request_id
=
jsonObject
.
getString
(
"request_id"
);
String
timestamp
=
jsonObject
.
getString
(
"timestamp"
);
String
version
=
jsonObject
.
getString
(
"version"
);
// 封装数据
MultiValueMap
<
String
,
String
>
params
=
new
LinkedMultiValueMap
<>();
params
.
set
(
"access_key"
,
access_key
);
params
.
add
(
"biz_content"
,
biz_content
);
params
.
add
(
"format"
,
format
);
params
.
add
(
"request_id"
,
request_id
);
params
.
add
(
"timestamp"
,
timestamp
);
params
.
add
(
"version"
,
version
);
// 获取签名字符串
List
<
String
>
signSourceParams
=
new
ArrayList
<>();
params
.
forEach
((
key
,
values
)
->
{
if
(
values
!=
null
&&
values
.
size
()
>
0
)
{
Object
value
=
values
.
get
(
0
);
if
(
value
!=
null
)
{
String
valueStr
=
value
.
toString
();
if
(!
valueStr
.
isEmpty
())
{
signSourceParams
.
add
(
String
.
format
(
"%s=%s"
,
key
,
valueStr
));
}
}
}
});
Collections
.
sort
(
signSourceParams
);
String
sign
=
null
;
try
{
String
paramStr
=
String
.
join
(
"&"
,
signSourceParams
);
// String paramStr = "access_key=DYZWFWZX&biz_content={\"aaz001\":\"1701142468806\",\"appid\":\"uRsNCSjIRWaN\",\"data\":\"{\\\"aaz001\\\":\\\"1701049617366\\\",\\\"data\\\":\\\"K7JVkCiKcUyv3VcKx8WZXvY3E+P2pXMFE3QDkhiVhJDgmJWN+NMwoQhoVjBSmO9fWdO+4kG6iYYc8JEefgYn4g==\\\",\\\"serviceCode\\\":\\\"00500100101\\\",\\\"appid\\\":\\\"uRsNCSjIRWaN\\\"}\"}&format=json&request_id=2be36a654da24cc8bb20×tamp=1701049618303&version=1.0";
log
.
info
(
"paramStr==>"
+
paramStr
);
byte
[]
paramStrBytes
=
paramStr
.
getBytes
(
StandardCharsets
.
UTF_8
);
byte
[]
signBytes
=
null
;
signBytes
=
ServicePlatformInvoker
.
SignUtils
.
sm2Sign
(
req
.
getPassword
(),
paramStrBytes
);
sign
=
Base64
.
getEncoder
().
encodeToString
(
signBytes
);
}
catch
(
Exception
e
)
{
log
.
error
(
"异常"
,
e
);
}
log
.
info
(
"signStr encode==>{}"
,
sign
);
messageResp
.
setSign
(
sign
);
return
messageResp
;
}
return
messageResp
;
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Security
.
removeProvider
(
BouncyCastleProvider
.
PROVIDER_NAME
);
Security
.
addProvider
(
new
BouncyCastleProvider
());
MessageReq
req
=
new
MessageReq
();
req
.
setPassword
(
"MIICSwIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////v////////////////////8AAAAA//////////8wRAQg/////v////////////////////8AAAAA//////////wEICjp+p6dn140TVqeS89lCafzl4n1FauPkt28vUFNlA6TBEEEMsSuLB8ZgRlfmQRGajnJlI/jC7/yZgvhcVpFiTNMdMe8Nzai9PZ3nFm9zuNraSFT0KmHfMYqR0AC3zLlITnwoAIhAP////7///////////////9yA99rIcYFK1O79Ak51UEjAgEBBIIBVTCCAVECAQEEIL0TuUlJwA2kCWlXlb+zSd/2Rpt4kf42vIJWq5VGH5NXoIHjMIHgAgEBMCwGByqGSM49AQECIQD////+/////////////////////wAAAAD//////////zBEBCD////+/////////////////////wAAAAD//////////AQgKOn6np2fXjRNWp5Lz2UJp/OXifUVq4+S3by9QU2UDpMEQQQyxK4sHxmBGV+ZBEZqOcmUj+MLv/JmC+FxWkWJM0x0x7w3NqL09necWb3O42tpIVPQqYd8xipHQALfMuUhOfCgAiEA/////v///////////////3ID32shxgUrU7v0CTnVQSMCAQGhRANCAATFqcMDO2aQJzPnu3LIm8uYBlNh8RwZfwEGBHiez2GFedbSDORLvkdagF0tLhlwXlU5KmM4fudIZoJVRNccY1pq"
);
req
.
setContent
(
"{\"access_key\":\"DYZWFWZX\",\"biz_content\":\"{\\\"appid\\\":\\\"uRsNCSjIRWaN\\\",\\\"aaz001\\\":\\\"202311246\\\",\\\"data\\\":\\\"0cHyD1AaGPJZQlkNbOBDdYZDOJG9ZKgfQx+Cg402jLG9k2dvIHUyIhczyilsD8V5AgEsRxySmCbP8QcA+l7p1aeOSJxCWZt\\\\\\/GEQrRFCWEAv9HgHRMUmaVPPn8DHtfS2zZSH\\\\\\/aNERu4SIfyl19GJVygjWglDixUwyRNvW0U0ZM6HMFZEqWV005hRbhk4APeZ+PH9t1wU0A2nGZnvzdrX6RRMYKboqkHPYl18nczQB3cA=\\\"}\",\"format\":\"json\",\"request_id\":\"2023112454559857\",\"timestamp\":\"1700811926506\",\"version\":\"1.0\"}"
);
req
.
setAlgorithm
(
"SM2"
);
/* MessageServiceImpl messageService = new MessageServiceImpl();
MessageResp messageResp = messageService.signMessage(req);
System.out.println(messageResp.getSign());*/
String
content
=
req
.
getContent
();
JSONObject
jsonObject
=
JSON
.
parseObject
(
content
);
String
access_key
=
jsonObject
.
getString
(
"access_key"
);
String
biz_content
=
jsonObject
.
getString
(
"biz_content"
);
String
format
=
jsonObject
.
getString
(
"format"
);
String
request_id
=
jsonObject
.
getString
(
"request_id"
);
String
timestamp
=
jsonObject
.
getString
(
"timestamp"
);
String
version
=
jsonObject
.
getString
(
"version"
);
StringBuilder
signSb
=
new
StringBuilder
();
signSb
.
append
(
"access_key"
).
append
(
"="
).
append
(
access_key
).
append
(
"&"
);
signSb
.
append
(
"biz_content"
).
append
(
"="
).
append
(
biz_content
).
append
(
"&"
);
signSb
.
append
(
"format"
).
append
(
"="
).
append
(
format
).
append
(
"&"
);
signSb
.
append
(
"request_id"
).
append
(
"="
).
append
(
request_id
).
append
(
"&"
);
signSb
.
append
(
"timestamp"
).
append
(
"="
).
append
(
timestamp
).
append
(
"&"
);
signSb
.
append
(
"version"
).
append
(
"="
).
append
(
version
).
append
(
"&"
);
String
signStr
=
signSb
.
substring
(
0
,
signSb
.
length
()
-
1
);
signStr
=
"access_key=DYZWFWZX&biz_content={\"aaz001\":\"1701142468806\",\"appid\":\"uRsNCSjIRWaN\",\"data\":\"{\\\"aaz001\\\":\\\"1701049617366\\\",\\\"data\\\":\\\"K7JVkCiKcUyv3VcKx8WZXvY3E+P2pXMFE3QDkhiVhJDgmJWN+NMwoQhoVjBSmO9fWdO+4kG6iYYc8JEefgYn4g==\\\",\\\"serviceCode\\\":\\\"00500100101\\\",\\\"appid\\\":\\\"uRsNCSjIRWaN\\\"}\"}&format=json&request_id=2be36a654da24cc8bb20×tamp=1701049618303&version=1.0"
;
log
.
info
(
"signStr==>{}"
,
signStr
);
// ServicePlatformInvoker invoker = new ServicePlatformInvoker("url", "DYZWFWZX", "MIICSwIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////v////////////////////8AAAAA//////////8wRAQg/////v////////////////////8AAAAA//////////wEICjp+p6dn140TVqeS89lCafzl4n1FauPkt28vUFNlA6TBEEEMsSuLB8ZgRlfmQRGajnJlI/jC7/yZgvhcVpFiTNMdMe8Nzai9PZ3nFm9zuNraSFT0KmHfMYqR0AC3zLlITnwoAIhAP////7///////////////9yA99rIcYFK1O79Ak51UEjAgEBBIIBVTCCAVECAQEEIL0TuUlJwA2kCWlXlb+zSd/2Rpt4kf42vIJWq5VGH5NXoIHjMIHgAgEBMCwGByqGSM49AQECIQD////+/////////////////////wAAAAD//////////zBEBCD////+/////////////////////wAAAAD//////////AQgKOn6np2fXjRNWp5Lz2UJp/OXifUVq4+S3by9QU2UDpMEQQQyxK4sHxmBGV+ZBEZqOcmUj+MLv/JmC+FxWkWJM0x0x7w3NqL09necWb3O42tpIVPQqYd8xipHQALfMuUhOfCgAiEA/////v///////////////3ID32shxgUrU7v0CTnVQSMCAQGhRANCAATFqcMDO2aQJzPnu3LIm8uYBlNh8RwZfwEGBHiez2GFedbSDORLvkdagF0tLhlwXlU5KmM4fudIZoJVRNccY1pq", ServicePlatformInvoker.SignAlgorithm.SM2, false);
byte
[]
bytes
=
ServicePlatformInvoker
.
SignUtils
.
sm2Sign
(
req
.
getPassword
(),
signStr
.
getBytes
());
log
.
info
(
"signStr encode==>{}"
,
Base64
.
getEncoder
().
encodeToString
(
bytes
));
SM2
sm2
=
SmUtil
.
sm2
(
req
.
getPassword
(),
null
);
//sm2.setMode(SM2Engine.Mode.C1C3C2);
//sm2.setEncoding(new PlainDSAEncoding());
byte
[]
sign
=
sm2
.
sign
(
signStr
.
getBytes
(),
null
);
log
.
info
(
"signStr encode==>{}"
,
Base64
.
getEncoder
().
encodeToString
(
sign
));
//SM2 sm2 = new SM2(privateKeyParameters, null);
/* String content = req.getContent();
JSONObject jsonObject = JSON.parseObject(content);
String access_key = jsonObject.getString("access_key");
String biz_content = jsonObject.getString("biz_content");
String format = jsonObject.getString("format");
String request_id = jsonObject.getString("request_id");
String timestamp = jsonObject.getString("timestamp");
String version = jsonObject.getString("version");
SM2 sm2 = SmUtil.sm2(req.getPassword(), null);
byte[] sign = sm2.sign(signStr.getBytes(), null);
log.info("signStr encode==>{}", Base64.getEncoder().encodeToString(sign));*/
/*
ECPrivateKeyParameters privateKeyParameters = BCUtil.toSm2Params(req.getPassword());
//创建sm2 对象
SM2 sm2 = new SM2(privateKeyParameters, null);
//这里需要手动设置,sm2 对象的默认值与我们期望的不一致 , 使用明文编码
sm2.usePlainEncoding();
sm2.setMode(SM2Engine.Mode.C1C2C3);
String content = req.getContent();
JSONObject jsonObject = JSON.parseObject(content);
String access_key = jsonObject.getString("access_key");
String biz_content = jsonObject.getString("biz_content");
String format = jsonObject.getString("format");
String request_id = jsonObject.getString("request_id");
String timestamp = jsonObject.getString("timestamp");
String version = jsonObject.getString("version");
StringBuilder signSb = new StringBuilder();
signSb.append("access_key").append("=").append(access_key).append("&");
signSb.append("biz_content").append("=").append(biz_content).append("&");
signSb.append("format").append("=").append(format).append("&");
signSb.append("request_id").append("=").append(request_id).append("&");
signSb.append("timestamp").append("=").append(timestamp).append("&");
signSb.append("version").append("=").append(version).append("&");
// String dataBytes = signSb.substring(0, signSb.length() - 1);
String dataBytes = signSb.substring(0, signSb.length() - 1);
byte[] sign = sm2.sign(dataBytes.getBytes(), null);
System.out.println("数据: " + HexUtil.encodeHexStr(dataBytes));
System.out.println("签名: " + HexUtil.encodeHexStr(sign));
*/
/* String password = "1234567890123456";
String content = "12313";
SM4 sm4 = SmUtil.sm4(password.getBytes());
String encryptContent = sm4.encryptBase64(content);
System.out.println("encryptContent:" + encryptContent);
sm4 = SmUtil.sm4(password.getBytes());
String decryptContent = sm4.decryptStr(encryptContent);
System.out.println("decryptContent:" + decryptContent);*/
}
}
\ No newline at end of file
base-manager/src/main/java/com/mortals/xhx/busiz/req/ApiReq.java
0 → 100644
View file @
f0fd6959
package
com.mortals.xhx.busiz.req
;
import
lombok.Data
;
/**
* 工作流请求头信息
*
* @author: zxfei
* @date: 2021/8/25 9:50
*/
@Data
public
class
ApiReq
<
T
>
{
/**
* 业务平台标识(唯一)
*/
private
String
tenantId
;
/**
* 实体数据()
*/
private
T
entity
;
}
base-manager/src/main/java/com/mortals/xhx/busiz/req/MessageReq.java
0 → 100644
View file @
f0fd6959
package
com.mortals.xhx.busiz.req
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
MessageReq
implements
Serializable
{
/**
* key
*/
private
String
key
;
/**
* 加解密方式(如RSA,AES)
*/
private
String
algorithm
;
/**
* 秘钥
*/
private
String
password
;
private
String
private_key
;
/**
* 内容
*/
private
String
content
;
/**
* 解密内容
*/
private
String
decryptContent
;
private
String
url
;
private
String
dataSecret
=
"QZTiVtyFIUjMCVLs"
;
public
static
void
main
(
String
[]
args
)
{
// DeviceReq deviceReq = new DeviceReq();
// deviceReq.setIsAdmin();
// deviceReq.seti
}
}
base-manager/src/main/java/com/mortals/xhx/busiz/req/PayApiRequestEntityVO.java
0 → 100644
View file @
f0fd6959
package
com.mortals.xhx.busiz.req
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* 请求对象
*
* @author liuyang05
*/
@Data
public
class
PayApiRequestEntityVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
3968797265834488447L
;
/**
* 应用ID
*/
private
String
appid
;
/**
* 请求流水号
*/
private
String
aaz001
;
/**
* 请求参数数据
*/
private
String
data
;
}
\ No newline at end of file
base-manager/src/main/java/com/mortals/xhx/busiz/rsp/ApiResp.java
0 → 100644
View file @
f0fd6959
package
com.mortals.xhx.busiz.rsp
;
import
lombok.Data
;
/**
* @author karlhoo
*/
@Data
public
class
ApiResp
<
T
>
{
/**
* 结果编码
*/
private
int
code
;
/**
* 结果描述
*/
private
String
msg
;
/**
* 响应数据
*/
private
T
data
;
}
base-manager/src/main/java/com/mortals/xhx/busiz/rsp/MessageResp.java
0 → 100644
View file @
f0fd6959
package
com.mortals.xhx.busiz.rsp
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
MessageResp
implements
Serializable
{
/**
* content(AES加密)
*/
private
String
content
;
private
String
sign
;
}
base-manager/src/main/java/com/mortals/xhx/busiz/web/MidSignApiController.java
View file @
f0fd6959
package
com.mortals.xhx.busiz.web
;
package
com.mortals.xhx.busiz.web
;
import
cn.hutool.core.net.url.UrlBuilder
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.http.HttpUtil
;
import
cn.hutool.http.HttpUtil
;
import
cn.hutool.http.Method
;
import
cn.hutool.http.Method
;
...
@@ -190,10 +189,6 @@ public class MidSignApiController {
...
@@ -190,10 +189,6 @@ public class MidSignApiController {
log
.
info
(
"mid resp:"
+
bodyJson
.
toJSONString
());
log
.
info
(
"mid resp:"
+
bodyJson
.
toJSONString
());
return
Rest
.
ok
(
bodyJson
.
toJSONString
());
return
Rest
.
ok
(
bodyJson
.
toJSONString
());
}
}
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"透传请求异常"
,
e
);
log
.
error
(
"透传请求异常"
,
e
);
...
...
base-manager/src/main/java/com/mortals/xhx/busiz/web/SecurityApiController.java
0 → 100644
View file @
f0fd6959
package
com.mortals.xhx.busiz.web
;
import
cn.hutool.crypto.SmUtil
;
import
cn.hutool.crypto.asymmetric.SM2
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.xhx.busiz.message.MessageService
;
import
com.mortals.xhx.busiz.req.MessageReq
;
import
com.mortals.xhx.busiz.rsp.ApiResp
;
import
com.mortals.xhx.busiz.rsp.MessageResp
;
import
com.mortals.xhx.common.code.ApiRespCodeEnum
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
import
java.util.Base64
;
import
java.util.List
;
@RestController
@Slf4j
@RequestMapping
(
"/api"
)
public
class
SecurityApiController
{
@Autowired
private
MessageService
messageService
;
/**
* 解密
*
* @param req
* @return
*/
@PostMapping
(
"decrypt"
)
public
String
decrypt
(
@RequestBody
MessageReq
req
)
{
log
.
info
(
"【解密】【请求体】--> "
+
JSONObject
.
toJSONString
(
req
));
ApiResp
<
MessageReq
>
rsp
=
new
ApiResp
<>();
rsp
.
setCode
(
ApiRespCodeEnum
.
SUCCESS
.
getValue
());
try
{
MessageReq
messageReq
=
messageService
.
decryptMessage
(
req
);
rsp
.
setData
(
messageReq
);
}
catch
(
Exception
e
)
{
log
.
error
(
"接收数据失败"
,
e
);
rsp
.
setCode
(
ApiRespCodeEnum
.
FAILED
.
getValue
());
rsp
.
setMsg
(
e
.
getMessage
());
return
JSON
.
toJSONString
(
rsp
);
}
log
.
info
(
"响应【解密】【响应体】--> "
+
JSONObject
.
toJSONString
(
rsp
));
return
JSON
.
toJSONString
(
rsp
);
}
/**
* 批量解密
*
* @param reqList
* @return
*/
@PostMapping
(
"decryptBatch"
)
public
String
decryptBatch
(
@RequestBody
List
<
MessageReq
>
reqList
)
{
log
.
info
(
"【批量解密】【请求体】--> "
+
JSONObject
.
toJSONString
(
reqList
));
ApiResp
<
List
<
MessageReq
>>
rsp
=
new
ApiResp
<>();
rsp
.
setCode
(
ApiRespCodeEnum
.
SUCCESS
.
getValue
());
try
{
List
<
MessageReq
>
respList
=
new
ArrayList
<>();
reqList
.
stream
().
forEach
(
req
->{
MessageReq
messageReq
=
messageService
.
decryptMessage
(
req
);
respList
.
add
(
messageReq
);
});
rsp
.
setData
(
respList
);
}
catch
(
Exception
e
)
{
log
.
error
(
"接收数据失败"
,
e
);
rsp
.
setCode
(
ApiRespCodeEnum
.
FAILED
.
getValue
());
rsp
.
setMsg
(
e
.
getMessage
());
return
JSON
.
toJSONString
(
rsp
);
}
log
.
info
(
"响应【批量解密】【响应体】--> "
+
JSONObject
.
toJSONString
(
rsp
));
return
JSON
.
toJSONString
(
rsp
);
}
/**
* 加密
*
* @param req
* @return
*/
@PostMapping
(
"encrypt"
)
public
String
encrypt
(
@RequestBody
MessageReq
req
)
{
log
.
info
(
"【加密】【请求体】--> "
+
JSONObject
.
toJSONString
(
req
));
ApiResp
<
MessageReq
>
rsp
=
new
ApiResp
<>();
rsp
.
setCode
(
ApiRespCodeEnum
.
SUCCESS
.
getValue
());
try
{
MessageReq
messageReq
=
messageService
.
encryptMessage
(
req
);
rsp
.
setData
(
messageReq
);
}
catch
(
Exception
e
)
{
log
.
error
(
"接收数据失败"
,
e
);
rsp
.
setCode
(
ApiRespCodeEnum
.
FAILED
.
getValue
());
rsp
.
setMsg
(
e
.
getMessage
());
return
JSON
.
toJSONString
(
rsp
);
}
log
.
info
(
"响应【加密】【响应体】--> "
+
JSONObject
.
toJSONString
(
rsp
));
return
JSON
.
toJSONString
(
rsp
);
}
/**
* 批量加密
*
* @param reqList
* @return
*/
@PostMapping
(
"encryptBatch"
)
public
String
encryptBatch
(
@RequestBody
List
<
MessageReq
>
reqList
)
{
log
.
info
(
"【批量加密】【请求体】--> "
+
JSONObject
.
toJSONString
(
reqList
));
ApiResp
<
List
<
MessageReq
>>
rsp
=
new
ApiResp
<>();
rsp
.
setCode
(
ApiRespCodeEnum
.
SUCCESS
.
getValue
());
try
{
List
<
MessageReq
>
respList
=
new
ArrayList
<>();
reqList
.
stream
().
forEach
(
req
->{
MessageReq
messageReq
=
messageService
.
encryptMessage
(
req
);
respList
.
add
(
messageReq
);
});
rsp
.
setData
(
respList
);
}
catch
(
Exception
e
)
{
log
.
error
(
"接收数据失败"
,
e
);
rsp
.
setCode
(
ApiRespCodeEnum
.
FAILED
.
getValue
());
rsp
.
setMsg
(
e
.
getMessage
());
return
JSON
.
toJSONString
(
rsp
);
}
log
.
info
(
"响应【批量加密】【响应体】--> "
+
JSONObject
.
toJSONString
(
rsp
));
return
JSON
.
toJSONString
(
rsp
);
}
/**
* 签名
*
* @param req
* @return
*/
@PostMapping
(
"sign"
)
public
String
sign
(
@RequestBody
MessageReq
req
)
{
log
.
info
(
"【签名】【请求体】--> "
+
JSONObject
.
toJSONString
(
req
));
ApiResp
<
MessageResp
>
rsp
=
new
ApiResp
<>();
rsp
.
setCode
(
ApiRespCodeEnum
.
SUCCESS
.
getValue
());
try
{
MessageResp
messageResp
=
messageService
.
signMessage
(
req
);
rsp
.
setData
(
messageResp
);
}
catch
(
Exception
e
)
{
log
.
error
(
"接收数据失败"
,
e
);
rsp
.
setCode
(
ApiRespCodeEnum
.
FAILED
.
getValue
());
rsp
.
setMsg
(
e
.
getMessage
());
return
JSON
.
toJSONString
(
rsp
);
}
log
.
info
(
"响应【签名】【响应体】--> "
+
JSONObject
.
toJSONString
(
rsp
));
return
JSON
.
toJSONString
(
rsp
);
}
public
static
void
main
(
String
[]
args
)
{
SM2
sm2
=
SmUtil
.
sm2
();
String
content
=
"{\"access_key\":\"DYZWFWZX\",\"biz_content\":\"{\\\"appid\\\":\\\"uRsNCSjIRWaN\\\",\\\"aaz001\\\":\\\"202311246\\\",\\\"key_set\\\":\\\"0cHyD1AaGPJZQlkNbOBDdYZDOJG9ZKgfQx+Cg402jLG9k2dvIHUyIhczyilsD8V5AgEsRxySmCbP8QcA+l7p1aeOSJxCWZt\\\\\\/GEQrRFCWEAv9HgHRMUmaVPPn8DHtfS2zZSH\\\\\\/aNERu4SIfyl19GJVygjWglDixUwyRNvW0U0ZM6HMFZEqWV005hRbhk4APeZ+PH9t1wU0A2nGZnvzdrX6RRMYKboqkHPYl18nczQB3cA=\\\"}\",\"format\":\"json\",\"request_id\":\"2023112454559857\",\"timestamp\":\"1700811926506\",\"version\":\"1.0\"}"
;
String
password
=
"MIICSwIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////v////////////////////8AAAAA//////////8wRAQg/////v////////////////////8AAAAA//////////wEICjp+p6dn140TVqeS89lCafzl4n1FauPkt28vUFNlA6TBEEEMsSuLB8ZgRlfmQRGajnJlI/jC7/yZgvhcVpFiTNMdMe8Nzai9PZ3nFm9zuNraSFT0KmHfMYqR0AC3zLlITnwoAIhAP////7///////////////9yA99rIcYFK1O79Ak51UEjAgEBBIIBVTCCAVECAQEEIL0TuUlJwA2kCWlXlb+zSd/2Rpt4kf42vIJWq5VGH5NXoIHjMIHgAgEBMCwGByqGSM49AQECIQD////+/////////////////////wAAAAD//////////zBEBCD////+/////////////////////wAAAAD//////////AQgKOn6np2fXjRNWp5Lz2UJp/OXifUVq4+S3by9QU2UDpMEQQQyxK4sHxmBGV+ZBEZqOcmUj+MLv/JmC+FxWkWJM0x0x7w3NqL09necWb3O42tpIVPQqYd8xipHQALfMuUhOfCgAiEA/////v///////////////3ID32shxgUrU7v0CTnVQSMCAQGhRANCAATFqcMDO2aQJzPnu3LIm8uYBlNh8RwZfwEGBHiez2GFedbSDORLvkdagF0tLhlwXlU5KmM4fudIZoJVRNccY1pq"
;
byte
[]
sign
=
sm2
.
sign
(
content
.
getBytes
(),
password
.
getBytes
());
System
.
out
.
println
(
Base64
.
getEncoder
().
encodeToString
(
sign
));
}
}
base-manager/src/test/java/com/mortals/httpclient/system/system.http
View file @
f0fd6959
...
@@ -192,3 +192,7 @@ Content-Type: application/json
...
@@ -192,3 +192,7 @@ Content-Type: application/json
"secondOrganize": "hongqi"
"secondOrganize": "hongqi"
}
}
###字典获取
GET {{baseUrl}}/param/dict?first=SkinBase&second=imageResolution
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment