Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cloud-backend
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
framework
cloud-backend
Commits
e5b2af94
Commit
e5b2af94
authored
Jun 15, 2021
by
袁伟铭
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.0.0
parent
277608a6
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
73 additions
and
94 deletions
+73
-94
api-server/src/main/java/com/zq/api/controller/ApiController.java
+6
-4
api-server/src/main/java/com/zq/api/form/ApiForm.java
+7
-14
api-server/src/main/java/com/zq/api/form/ApiResp.java
+13
-58
api-server/src/main/java/com/zq/api/interceptor/ApiInterceptor.java
+2
-0
api-server/src/main/java/com/zq/api/service/impl/BaseApiLogic.java
+11
-7
api-server/src/main/java/com/zq/api/utils/ApiUtils.java
+23
-11
common-utils/src/main/java/com/zq/common/encrypt/EncryptUtils.java
+8
-0
common-utils/src/main/java/com/zq/common/encrypt/RsaUtils.java
+3
-0
No files found.
api-server/src/main/java/com/zq/api/controller/ApiController.java
View file @
e5b2af94
...
@@ -43,15 +43,17 @@ public class ApiController {
...
@@ -43,15 +43,17 @@ public class ApiController {
long
start
=
System
.
currentTimeMillis
();
long
start
=
System
.
currentTimeMillis
();
ApiForm
form
=
ServletUtil
.
toBean
(
request
,
ApiForm
.
class
,
true
);
ApiForm
form
=
ServletUtil
.
toBean
(
request
,
ApiForm
.
class
,
true
);
if
(!
form
.
parseBizContent
())
{
return
ApiUtils
.
getParamError
(
form
);
}
// 不处理Request Method:OPTIONS的请求
// 不处理Request Method:OPTIONS的请求
if
(
request
.
getMethod
().
equals
(
"OPTIONS"
))
{
if
(
request
.
getMethod
().
equals
(
"OPTIONS"
))
{
return
ApiUtils
.
getSuccessResp
(
form
);
return
ApiUtils
.
getSuccessResp
(
form
);
}
}
//解析业务参数
if
(!
form
.
parseBizContent
())
{
return
ApiUtils
.
getParamError
(
form
);
}
String
method
=
form
.
getMethod
();
String
method
=
form
.
getMethod
();
if
(
StrUtil
.
isBlank
(
method
))
{
if
(
StrUtil
.
isBlank
(
method
))
{
method
=
request
.
getParameter
(
"method"
);
method
=
request
.
getParameter
(
"method"
);
...
@@ -124,6 +126,6 @@ public class ApiController {
...
@@ -124,6 +126,6 @@ public class ApiController {
ApiForm
from
=
ServletUtil
.
toBean
(
request
,
ApiForm
.
class
,
true
);
ApiForm
from
=
ServletUtil
.
toBean
(
request
,
ApiForm
.
class
,
true
);
ApiUtils
.
DEBUG
=
!
ApiUtils
.
DEBUG
;
ApiUtils
.
DEBUG
=
!
ApiUtils
.
DEBUG
;
return
new
ApiResp
(
from
).
addData
(
"debug"
,
ApiUtils
.
DEBUG
);
return
new
ApiResp
(
from
).
setData
(
ApiUtils
.
DEBUG
);
}
}
}
}
api-server/src/main/java/com/zq/api/form/ApiForm.java
View file @
e5b2af94
...
@@ -7,12 +7,13 @@ import com.alibaba.fastjson.JSONObject;
...
@@ -7,12 +7,13 @@ import com.alibaba.fastjson.JSONObject;
import
com.zq.api.config.ConfigCache
;
import
com.zq.api.config.ConfigCache
;
import
com.zq.api.utils.ApiUtils
;
import
com.zq.api.utils.ApiUtils
;
import
com.zq.api.utils.NumberUtils
;
import
com.zq.api.utils.NumberUtils
;
import
com.zq.common.encrypt.EncryptUtils
;
import
com.zq.common.encrypt.RsaUtils
;
import
com.zq.common.vo.ApiTokenVo
;
import
com.zq.common.vo.ApiTokenVo
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.TreeMap
;
import
java.util.TreeMap
;
...
@@ -43,6 +44,10 @@ public class ApiForm {
...
@@ -43,6 +44,10 @@ public class ApiForm {
public
boolean
parseBizContent
()
{
public
boolean
parseBizContent
()
{
try
{
try
{
boolean
flag
=
ConfigCache
.
getValueToBoolean
(
"API.PARAM.ENCRYPT"
);
// API参数是否加密
if
(
StrUtil
.
isNotBlank
(
bizContent
)
&&
flag
)
{
bizContent
=
ApiUtils
.
decode
(
bizContent
);
}
bizContentJson
=
JSON
.
parseObject
(
bizContent
);
bizContentJson
=
JSON
.
parseObject
(
bizContent
);
if
(
bizContentJson
==
null
)
{
if
(
bizContentJson
==
null
)
{
bizContentJson
=
new
JSONObject
();
bizContentJson
=
new
JSONObject
();
...
@@ -192,20 +197,8 @@ public class ApiForm {
...
@@ -192,20 +197,8 @@ public class ApiForm {
treeMap
.
put
(
"nonce"
,
this
.
nonce
);
treeMap
.
put
(
"nonce"
,
this
.
nonce
);
treeMap
.
put
(
"method"
,
this
.
method
);
treeMap
.
put
(
"method"
,
this
.
method
);
treeMap
.
put
(
"version"
,
this
.
version
);
treeMap
.
put
(
"version"
,
this
.
version
);
String
bizContent
=
null
;
String
bizContent
=
StrUtil
.
isBlank
(
this
.
bizContent
)
?
""
:
this
.
bizContent
;
try
{
bizContent
=
this
.
bizContent
;
bizContent
=
StrUtil
.
isBlank
(
bizContent
)
?
""
:
bizContent
;
boolean
flag
=
ConfigCache
.
getValueToBoolean
(
"API.PARAM.ENCRYPT"
);
// API参数是否加密
if
(
StrUtil
.
isNotBlank
(
bizContent
)
&&
flag
)
{
bizContent
=
ApiUtils
.
decode
(
bizContent
);
}
}
catch
(
UnsupportedEncodingException
e
)
{
log
.
error
(
"bizContent参数解析失败"
,
e
);
}
treeMap
.
put
(
"bizContent"
,
bizContent
);
treeMap
.
put
(
"bizContent"
,
bizContent
);
return
treeMap
;
return
treeMap
;
}
}
...
...
api-server/src/main/java/com/zq/api/form/ApiResp.java
View file @
e5b2af94
package
com
.
zq
.
api
.
form
;
package
com
.
zq
.
api
.
form
;
import
com.zq.api.constant.ApiCodeEnum
;
import
com.zq.api.constant.ApiCodeEnum
;
import
lombok.
Data
;
import
lombok.
Getter
;
import
java.util.HashMap
;
@Getter
import
java.util.Map
;
@Data
public
class
ApiResp
{
public
class
ApiResp
{
private
String
apiNo
=
""
;
private
String
apiNo
=
""
;
private
String
code
=
ApiCodeEnum
.
SUCCESS
.
code
();
private
String
code
=
ApiCodeEnum
.
SUCCESS
.
code
();
private
String
msg
=
ApiCodeEnum
.
SUCCESS
.
msg
();
private
String
msg
=
ApiCodeEnum
.
SUCCESS
.
msg
();
private
Long
timestamp
=
System
.
currentTimeMillis
();
private
Long
timestamp
=
System
.
currentTimeMillis
();
private
Map
<
String
,
Map
<
String
,
Object
>>
data
=
new
HashMap
<>();
private
Object
data
;
public
ApiResp
(
ApiForm
from
)
{
setFrom
(
from
);
}
public
ApiResp
(
ApiForm
from
,
Map
<
String
,
Object
>
map
)
{
public
ApiResp
(
ApiForm
form
)
{
setFrom
(
from
);
this
.
apiNo
=
form
.
getApiNo
()
==
null
?
""
:
form
.
getApiNo
();
data
.
put
(
"data"
,
map
);
}
}
public
ApiResp
(
ApiForm
from
,
ApiCodeEnum
apiCodeEnum
)
{
public
ApiResp
(
ApiCodeEnum
apiCodeEnum
)
{
setFrom
(
from
);
this
.
code
=
apiCodeEnum
.
code
();
this
.
code
=
apiCodeEnum
.
code
();
this
.
msg
=
apiCodeEnum
.
msg
();
this
.
msg
=
apiCodeEnum
.
msg
();
}
}
public
ApiResp
(
ApiCodeEnum
apiCodeEnum
)
{
public
ApiResp
(
Api
Form
form
,
Api
CodeEnum
apiCodeEnum
)
{
this
.
code
=
apiCodeEnum
.
code
();
this
.
code
=
apiCodeEnum
.
code
();
this
.
msg
=
apiCodeEnum
.
msg
();
this
.
msg
=
apiCodeEnum
.
msg
();
}
}
public
ApiResp
setFrom
(
ApiForm
from
)
{
if
(
from
!=
null
)
{
this
.
apiNo
=
from
.
getApiNo
()
==
null
?
""
:
from
.
getApiNo
();
}
return
this
;
}
public
String
getApiNo
()
{
return
apiNo
;
}
public
ApiResp
setApiNo
(
String
apiNo
)
{
public
ApiResp
setApiNo
(
String
apiNo
)
{
this
.
apiNo
=
apiNo
;
this
.
apiNo
=
apiNo
;
return
this
;
return
this
;
}
}
public
String
getCode
()
{
return
code
;
}
public
ApiResp
setCode
(
String
code
)
{
public
ApiResp
setCode
(
String
code
)
{
this
.
code
=
code
;
this
.
code
=
code
;
return
this
;
return
this
;
}
}
public
String
getMsg
()
{
return
msg
;
}
public
ApiResp
setMsg
(
String
msg
)
{
public
ApiResp
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
this
.
msg
=
msg
;
return
this
;
return
this
;
}
}
public
Boolean
isSuccess
()
{
public
ApiResp
setTimestamp
(
Long
timestamp
)
{
return
this
.
getCode
().
equals
(
ApiCodeEnum
.
SUCCESS
.
code
());
this
.
timestamp
=
timestamp
;
}
public
Map
<
String
,
Object
>
getData
()
{
return
this
.
data
.
get
(
"data"
);
}
public
ApiResp
setData
(
Map
<
String
,
Object
>
dataMap
)
{
this
.
data
.
put
(
"data"
,
dataMap
);
return
this
;
return
this
;
}
}
public
ApiResp
addData
(
String
key
,
Object
value
)
{
public
ApiResp
setData
(
Object
data
)
{
Map
<
String
,
Object
>
dataMap
=
getData
();
this
.
data
=
data
;
if
(
dataMap
==
null
)
{
dataMap
=
new
HashMap
<>();
}
dataMap
.
put
(
key
,
value
);
this
.
data
.
put
(
"data"
,
dataMap
);
return
this
;
return
this
;
}
}
@Override
public
Boolean
isSuccess
()
{
public
String
toString
()
{
return
this
.
getCode
().
equals
(
ApiCodeEnum
.
SUCCESS
.
code
());
return
"[apiNo="
+
this
.
apiNo
+
"]"
+
"[code="
+
this
.
code
+
"]"
+
"[msg="
+
this
.
msg
+
"]"
+
"[data="
+
this
.
data
+
"]"
;
}
}
}
}
api-server/src/main/java/com/zq/api/interceptor/ApiInterceptor.java
View file @
e5b2af94
...
@@ -74,6 +74,8 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
...
@@ -74,6 +74,8 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
+
"\n[time="
+
(
System
.
currentTimeMillis
()
-
start
)
+
"ms]"
);
+
"\n[time="
+
(
System
.
currentTimeMillis
()
-
start
)
+
"ms]"
);
}
}
return
true
;
return
true
;
}
}
...
...
api-server/src/main/java/com/zq/api/service/impl/BaseApiLogic.java
View file @
e5b2af94
package
com
.
zq
.
api
.
service
.
impl
;
package
com
.
zq
.
api
.
service
.
impl
;
import
com.zq.api.constant.ApiCodeEnum
;
import
com.zq.api.form.ApiForm
;
import
com.zq.api.form.ApiForm
;
import
com.zq.api.form.ApiResp
;
import
com.zq.api.form.ApiResp
;
import
com.zq.api.service.IApiLogic
;
import
com.zq.api.service.IApiLogic
;
...
@@ -24,15 +23,20 @@ public abstract class BaseApiLogic implements IApiLogic {
...
@@ -24,15 +23,20 @@ public abstract class BaseApiLogic implements IApiLogic {
public
ApiResp
valid
(
ApiForm
form
)
{
public
ApiResp
valid
(
ApiForm
form
)
{
// 不需要验证的方法
// 不需要验证的方法
if
(
notValid
(
form
))
{
if
(
notValid
(
form
))
{
return
new
Api
Resp
(
form
);
return
ApiUtils
.
getSuccess
Resp
(
form
);
}
}
TreeMap
<
String
,
String
>
tree
=
form
.
getSignTreeMap
();
String
timestamp
=
form
.
getTimestamp
();
String
serverSign
=
ApiUtils
.
getSign
(
tree
);
// 一分钟内的数据有效
if
(
Long
.
parseLong
(
timestamp
)
+
(
60
*
1000
)
>
System
.
currentTimeMillis
())
{
return
ApiUtils
.
getCheckSignValidError
(
form
);
}
String
serverSign
=
ApiUtils
.
getSign
(
form
.
getSignTreeMap
());
if
(!
serverSign
.
equals
(
form
.
getSign
()))
{
if
(!
serverSign
.
equals
(
form
.
getSign
()))
{
return
new
ApiResp
(
form
,
ApiCodeEnum
.
CHECK_SIGN_VALID_ERROR
);
return
ApiUtils
.
getCheckSignValidError
(
form
);
}
}
return
new
Api
Resp
(
form
);
return
ApiUtils
.
getSuccess
Resp
(
form
);
}
}
/**
/**
...
@@ -49,7 +53,7 @@ public abstract class BaseApiLogic implements IApiLogic {
...
@@ -49,7 +53,7 @@ public abstract class BaseApiLogic implements IApiLogic {
@Override
@Override
public
ApiResp
logout
(
ApiForm
form
)
{
public
ApiResp
logout
(
ApiForm
form
)
{
return
new
ApiResp
(
form
).
addData
(
"r"
,
"ok"
);
return
new
ApiResp
(
form
).
setData
(
"ok"
);
}
}
@Override
@Override
...
...
api-server/src/main/java/com/zq/api/utils/ApiUtils.java
View file @
e5b2af94
package
com
.
zq
.
api
.
utils
;
package
com
.
zq
.
api
.
utils
;
import
cn.hutool.crypto.digest.MD5
;
import
cn.hutool.crypto.digest.MD5
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.zq.api.constant.ApiCodeEnum
;
import
com.zq.api.constant.ApiCodeEnum
;
import
com.zq.api.form.ApiForm
;
import
com.zq.api.form.ApiForm
;
import
com.zq.api.form.ApiResp
;
import
com.zq.api.form.ApiResp
;
import
com.zq.api.service.IApiLogic
;
import
com.zq.api.service.IApiLogic
;
import
com.zq.api.service.impl.ApiV100Logic
;
import
com.zq.api.service.impl.ApiV100Logic
;
import
com.zq.api.service.impl.ApiV101Logic
;
import
com.zq.api.service.impl.ApiV101Logic
;
import
com.zq.common.encrypt.EncryptUtils
;
import
com.zq.common.encrypt.RsaUtils
;
import
com.zq.common.vo.ResultVo
;
import
com.zq.common.vo.ResultVo
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
java.io.UnsupportedEncodingException
;
import
java.io.UnsupportedEncodingException
;
...
@@ -128,10 +133,21 @@ public class ApiUtils {
...
@@ -128,10 +133,21 @@ public class ApiUtils {
return
new
ApiResp
(
form
,
ApiCodeEnum
.
PARAM_ERROR
);
return
new
ApiResp
(
form
,
ApiCodeEnum
.
PARAM_ERROR
);
}
}
/**
* 传递参数异常
* <p>
* 2016年9月29日 上午11:44:38
*
* @return
*/
public
static
ApiResp
getCheckSignValidError
(
ApiForm
form
)
{
return
new
ApiResp
(
form
,
ApiCodeEnum
.
CHECK_SIGN_VALID_ERROR
);
}
public
static
ApiResp
toApiResp
(
ApiForm
form
,
ResultVo
resultVo
)
{
public
static
ApiResp
toApiResp
(
ApiForm
form
,
ResultVo
resultVo
)
{
ApiResp
apiResp
=
new
ApiResp
(
form
);
ApiResp
apiResp
=
new
ApiResp
(
form
);
if
(
resultVo
.
isSuccess
())
{
if
(
resultVo
.
isSuccess
())
{
apiResp
.
addData
(
"data"
,
resultVo
.
getData
()
==
null
?
""
:
resultVo
.
getData
());
apiResp
.
setData
(
resultVo
.
getData
()
==
null
?
""
:
resultVo
.
getData
());
}
else
{
}
else
{
return
apiResp
.
setCode
(
String
.
valueOf
(
resultVo
.
getErrCode
())).
setMsg
(
resultVo
.
getErrMsg
());
return
apiResp
.
setCode
(
String
.
valueOf
(
resultVo
.
getErrCode
())).
setMsg
(
resultVo
.
getErrMsg
());
}
}
...
@@ -149,7 +165,7 @@ public class ApiUtils {
...
@@ -149,7 +165,7 @@ public class ApiUtils {
*/
*/
public
static
String
decode
(
String
params
)
throws
UnsupportedEncodingException
{
public
static
String
decode
(
String
params
)
throws
UnsupportedEncodingException
{
params
=
URLDecoder
.
decode
(
params
,
"utf-8"
);
params
=
URLDecoder
.
decode
(
params
,
"utf-8"
);
params
=
new
String
(
Base64
.
decodeBase64
(
params
.
getBytes
(
StandardCharsets
.
UTF_8
)),
StandardCharsets
.
UTF_8
);
params
=
EncryptUtils
.
rsaDecodeByPrivateKey
(
params
,
RsaUtils
.
privateKey
);
return
params
;
return
params
;
}
}
...
@@ -163,7 +179,10 @@ public class ApiUtils {
...
@@ -163,7 +179,10 @@ public class ApiUtils {
* @throws UnsupportedEncodingException
* @throws UnsupportedEncodingException
*/
*/
public
static
String
encode
(
String
params
)
throws
UnsupportedEncodingException
{
public
static
String
encode
(
String
params
)
throws
UnsupportedEncodingException
{
params
=
new
String
(
Base64
.
encodeBase64
(
params
.
getBytes
(
StandardCharsets
.
UTF_8
)),
StandardCharsets
.
UTF_8
);
params
=
EncryptUtils
.
rsaDecodeByPrivateKey
(
params
,
RsaUtils
.
publicKey
);
if
(
StringUtils
.
isBlank
(
params
))
{
return
""
;
}
params
=
URLEncoder
.
encode
(
params
,
"utf-8"
);
params
=
URLEncoder
.
encode
(
params
,
"utf-8"
);
return
params
;
return
params
;
}
}
...
@@ -177,19 +196,12 @@ public class ApiUtils {
...
@@ -177,19 +196,12 @@ public class ApiUtils {
* @return
* @return
*/
*/
public
static
String
getSign
(
TreeMap
<
String
,
String
>
paramMaps
)
{
public
static
String
getSign
(
TreeMap
<
String
,
String
>
paramMaps
)
{
String
nonce
=
""
;
// 原始请求串
// 原始请求串
StringBuilder
src
=
new
StringBuilder
();
StringBuilder
src
=
new
StringBuilder
();
for
(
Map
.
Entry
<
String
,
String
>
entry
:
paramMaps
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
String
>
entry
:
paramMaps
.
entrySet
())
{
if
(
entry
.
getKey
().
equals
(
"nonce"
))
{
nonce
=
entry
.
getValue
();
continue
;
}
src
.
append
(
entry
.
getKey
()).
append
(
"="
).
append
(
entry
.
getValue
()).
append
(
"&"
);
src
.
append
(
entry
.
getKey
()).
append
(
"="
).
append
(
entry
.
getValue
()).
append
(
"&"
);
}
}
// 待加密串
src
.
append
(
"nonce="
).
append
(
nonce
==
null
?
""
:
nonce
);
System
.
out
.
println
(
"签名:"
+
src
.
toString
());
return
MD5
.
create
().
digestHex
(
src
.
toString
());
return
MD5
.
create
().
digestHex
(
src
.
toString
());
}
}
}
}
common-utils/src/main/java/com/zq/common/encrypt/EncryptUtils.java
View file @
e5b2af94
...
@@ -44,6 +44,14 @@ public class EncryptUtils {
...
@@ -44,6 +44,14 @@ public class EncryptUtils {
private
static
final
int
HEX_RADIUS
=
16
;
private
static
final
int
HEX_RADIUS
=
16
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
String
data
=
"123456"
;
String
bytes
=
rsaEncryptByPublicKey
(
data
,
RsaUtils
.
publicKey
);
System
.
out
.
println
(
bytes
);
String
bytes1
=
rsaDecodeByPrivateKey
(
bytes
,
RsaUtils
.
privateKey
);
System
.
out
.
println
(
bytes1
);
}
/**
/**
* MD5 加密字符串
* MD5 加密字符串
*
*
...
...
common-utils/src/main/java/com/zq/common/encrypt/RsaUtils.java
View file @
e5b2af94
...
@@ -48,6 +48,9 @@ public class RsaUtils {
...
@@ -48,6 +48,9 @@ public class RsaUtils {
*/
*/
private
static
final
int
MAX_DECRYPT_BLOCK
=
128
;
private
static
final
int
MAX_DECRYPT_BLOCK
=
128
;
public
static
String
privateKey
=
"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMTaoTuj4LU9WAMeaVWcpwgyMcdvAA3JRDcG0+pWG086c+WPdSggNNZaVw3szCKOTnWvNc6SoqjpjpbQpC57uag67VzKWLmsZoF6SXjCARyRaEkfK2VRHTfkVpyd8FF16gebVhhyjbkkja9JVEekwqOGzfmnfSKfx5LwvcSxdiSrAgMBAAECgYBZgGHQQPk4zhRHDrurnhbfhhrV5yTqH7kxH5yYLeAqzJPHKsuEm+gKEXcFMMW7bGJF5YycSFVGYTJgZapQLBbDlrZdM8SjxsNyrCKI3v3LNQDsqs5x751HfFVvTme7wroN/uJszUaQJPagEUckMkHvpv7XWoL3Wbz7oy94T3ENoQJBAPAhj2yo9jRZv5JRlYy5BFwqYpxSWqGjzr2k2YiGqB9/y/pDpDx3q42FaBcOlOOeh/My+iVNLcezqgj+U0yx79ECQQDR3Oz9ckCm2q7AMCLFmp9cs4dws6DLim35awOvLIXtm/Z1tRNyuLqb6g2VM4O/QiTu64F3+ljKiOWHAcgxqUe7AkEArTuYy4vs6gFhCb6fg8Cp24+cSifDSF7zM67sW+jA+tBoJ+iKYDD46wS1/gQ/9yGT9Cfve998ylfbr9dB4s9vMQJAOH/uHd3gogtF+N/8vI6AUQjUcfcqVyIRsZCqEUM/W1Ud6VqyvbQWKVu+BGk2EwvPvbMRzCdOOFja0pocN6KHeQJAQPwlDo1IHJI5F60CvfIG8dIwtGexMnd4NNHQ4KH0peK9jUCPkkpW0No5ZEtKNgfdPk23erfyx5cGqocvnoUpoQ=="
;
public
static
String
publicKey
=
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDE2qE7o+C1PVgDHmlVnKcIMjHHbwANyUQ3BtPqVhtPOnPlj3UoIDTWWlcN7Mwijk51rzXOkqKo6Y6W0KQue7moOu1cyli5rGaBekl4wgEckWhJHytlUR035FacnfBRdeoHm1YYco25JI2vSVRHpMKjhs35p30in8eS8L3EsXYkqwIDAQAB"
;
/**
/**
* 生成密钥对(公钥和私钥)
* 生成密钥对(公钥和私钥)
*
*
...
...
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