Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_53854309
数字签名
提交
03b35aa6
数
数字签名
项目概览
qq_53854309
/
数字签名
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
数
数字签名
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
03b35aa6
编写于
4月 22, 2023
作者:
H
hml
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
默认的
上级
6bf321b8
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
72 addition
and
60 deletion
+72
-60
src/main/java/com/hao/digitalsignature/controller/FileDealController.java
...m/hao/digitalsignature/controller/FileDealController.java
+45
-10
src/main/java/com/hao/digitalsignature/controller/FilesController.java
.../com/hao/digitalsignature/controller/FilesController.java
+0
-28
src/main/java/com/hao/digitalsignature/encryption/AES1.java
src/main/java/com/hao/digitalsignature/encryption/AES1.java
+7
-7
src/main/java/com/hao/digitalsignature/encryption/AESmiyao.java
...in/java/com/hao/digitalsignature/encryption/AESmiyao.java
+3
-1
src/main/java/com/hao/digitalsignature/encryption/DSASign.java
...ain/java/com/hao/digitalsignature/encryption/DSASign.java
+1
-1
src/main/java/com/hao/digitalsignature/encryption/RSAEncrypt.java
.../java/com/hao/digitalsignature/encryption/RSAEncrypt.java
+16
-13
未找到文件。
src/main/java/com/hao/digitalsignature/controller/FileDealController.java
浏览文件 @
03b35aa6
package
com.hao.digitalsignature.controller
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.hao.digitalsignature.encryption.AES1
;
import
com.hao.digitalsignature.encryption.AESmiyao
;
import
com.hao.digitalsignature.encryption.RSAEncrypt
;
import
com.hao.digitalsignature.entity.Files
;
import
com.hao.digitalsignature.mapper.FileMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
...
...
@@ -16,11 +22,16 @@ import java.io.IOException;
import
java.io.OutputStream
;
import
java.net.SocketException
;
import
java.net.URLEncoder
;
import
java.util.
UUID
;
import
java.util.
*
;
@RequestMapping
(
"/file"
)
@RestController
public
class
FileDealController
{
@Autowired
private
FileMapper
fileMapper
;
@RequestMapping
(
value
=
"upload"
)
public
String
upload
(
@RequestParam
(
"file"
)
MultipartFile
pic
)
throws
SocketException
,
IOException
{
String
newName
=
""
;
...
...
@@ -54,20 +65,47 @@ public class FileDealController {
* @return
*/
@RequestMapping
(
value
=
"download"
)
public
static
void
downFile
(
@RequestBody
String
fileName
,
HttpServletRequest
request
,
public
void
downFile
(
@RequestBody
String
fileName
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
// 得到要下载的文件名
fileName
=
fileName
.
substring
(
0
,
fileName
.
length
()-
1
);
try
{
//获取摘要
QueryWrapper
<
Files
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
eq
(
"picture_realname"
,
fileName
.
split
(
"\\."
)[
0
]);
Files
files
=
fileMapper
.
selectOne
(
wrapper
);
System
.
out
.
println
(
"摘要:"
+
files
.
getDig
().
split
(
";"
)[
2
]);
List
<
String
>
dig
=
new
ArrayList
<
String
>(
Arrays
.
asList
(
files
.
getDig
().
split
(
";"
)));
dig
.
add
(
files
.
getCreatetime
());
String
[]
dig1
=
new
String
[
dig
.
size
()];
dig
.
toArray
(
dig1
);
for
(
int
i
=
0
;
i
<
dig1
.
length
;
i
++)
System
.
out
.
println
(
"正确签名和时间戳"
+
dig1
[
i
]);
//生成AES密钥
String
aesPassword
=
AESmiyao
.
getKey
();
//AES加密
String
encryContent
=
AES1
.
encryptAES
(
files
.
getDig
().
split
(
";"
)[
2
],
aesPassword
);
//对称加密后的签名
dig1
[
2
]=
encryContent
;
for
(
int
i
=
0
;
i
<
dig1
.
length
;
i
++)
System
.
out
.
println
(
"加密摘要的签名和时间戳"
+
dig1
[
i
]);
//发送RSA
System
.
out
.
println
(
Arrays
.
toString
(
dig1
));
String
rsaMsg
=
new
String
();
for
(
int
i
=
0
;
i
<
dig1
.
length
;
i
++){
rsaMsg
+=
dig1
[
i
];
rsaMsg
+=
";"
;
}
byte
[]
rsaEn
=
RSAEncrypt
.
RSAen
(
rsaMsg
.
substring
(
0
,
rsaMsg
.
length
()-
1
));
//RSA解密
String
rsaDe
=
RSAEncrypt
.
RSAde
(
rsaEn
);
try
{
FilesController
filesController
=
new
FilesController
();
// String[] strs =fileName.split("\\.");
// Files files = filesController.search("fabbc4d4-d0d6-4ff8-9402-1bea422f4fcf");
System
.
out
.
println
(
filesController
.
search
(
"fabbc4d4-d0d6-4ff8-9402-1bea422f4fcf"
));
//下载图片
File
filep
=
new
File
(
""
);
String
filePath
=
filep
.
getCanonicalPath
();
// 上传位置
...
...
@@ -89,7 +127,6 @@ public class FileDealController {
// response.setContentType("image/png");
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
URLEncoder
.
encode
(
realname
,
"UTF-8"
));
// 读取要下载的文件,保存到文件输入流
FileInputStream
in
=
new
FileInputStream
(
fileSaveRootPath
+
"\\"
+
fileName
);
// response.setHeader("Location",);
...
...
@@ -98,12 +135,10 @@ public class FileDealController {
// 创建缓冲区
byte
buffer
[]
=
new
byte
[
1024
];
int
len
=
0
;
// 循环将输入流中的内容读取到缓冲区当中
while
((
len
=
in
.
read
(
buffer
))
>
0
)
{
// 输出缓冲区的内容到浏览器,实现文件下载
out
.
write
(
buffer
,
0
,
len
);
}
// 关闭文件输入流
in
.
close
();
...
...
src/main/java/com/hao/digitalsignature/controller/FilesController.java
浏览文件 @
03b35aa6
package
com.hao.digitalsignature.controller
;
import
com.baomidou.mybatisplus.core.conditions.Wrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.hao.digitalsignature.encryption.DSASign
;
import
com.hao.digitalsignature.encryption.RSAEncrypt
;
import
com.hao.digitalsignature.entity.User
;
import
com.hao.digitalsignature.mapper.UserMapper
;
import
com.sun.org.apache.xerces.internal.impl.dv.util.Base64
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
...
...
@@ -17,7 +12,6 @@ import javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.File
;
import
java.io.IOException
;
import
java.math.BigInteger
;
import
java.util.List
;
@RestController
...
...
@@ -48,15 +42,6 @@ public class FilesController {
// File file = new File(path+photo.getOriginalFilename());
// photo.transferTo(file);
// }
@GetMapping
(
"file/search"
)
public
Files
search
(
String
name
){
QueryWrapper
<
Files
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
eq
(
"picture_realname"
,
name
);
Files
files
=
fileMapper
.
selectOne
(
wrapper
);
System
.
out
.
println
(
files
);
return
files
;
}
@PutMapping
(
"/file/update"
)
public
String
update
(
int
id
,
String
name
){
Files
file
=
fileMapper
.
selectById
(
id
);
...
...
@@ -71,19 +56,6 @@ public class FilesController {
@PostMapping
(
"/file/save"
)
public
String
save
(
@RequestBody
Files
file
){
System
.
out
.
println
(
file
);
BigInteger
back
[]=
new
BigInteger
[
2
];
int
j
=
0
;
Base64
base64
=
new
Base64
();
DSASign
dsa
=
new
DSASign
();
dsa
.
initKeys
();
//要签名的数据,传入AES加密后的内容
String
message
=
file
.
getPicture_realname
();
System
.
out
.
println
(
"签名的数据:"
+
message
);
BigInteger
sig
[]
=
dsa
.
signature
(
message
.
getBytes
());
String
dig
=
sig
[
0
]+
";"
+
sig
[
1
]+
";"
+
dsa
.
_hashInZq
(
message
.
getBytes
());
file
.
setDig
(
dig
);
int
i
=
fileMapper
.
insert
(
file
);
if
(
i
>
0
)
return
"success"
;
...
...
src/main/java/com/hao/digitalsignature/encryption/AES1.java
浏览文件 @
03b35aa6
...
...
@@ -21,14 +21,14 @@ public class AES1 {
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SecurityUtil
.
class
);
private
static
final
String
ENCODING
=
"UTF-8"
;
private
static
final
String
PASSWORD
=
"388f31778f8d7b227170f6ef67028e26"
;
// 加密秘钥
//
private static final String PASSWORD = "388f31778f8d7b227170f6ef67028e26"; // 加密秘钥
/**
* AES加密
* @param content 明文
* @return 密文
*/
public
static
String
encryptAES
(
String
content
)
throws
Exception
{
public
static
String
encryptAES
(
String
content
,
String
PASSWORD
)
throws
Exception
{
if
(
StringUtils
.
isEmpty
(
content
))
{
throw
new
Exception
(
"明文不能为空!"
);
}
...
...
@@ -44,7 +44,7 @@ public class AES1 {
* @param encryptResultStr 密文
* @return 明文
*/
public
static
String
decryptAES
(
String
encryptResultStr
)
throws
Exception
{
public
static
String
decryptAES
(
String
encryptResultStr
,
String
PASSWORD
)
throws
Exception
{
if
(
StringUtils
.
isEmpty
(
encryptResultStr
))
{
throw
new
Exception
(
"密文不能为空"
);
}
...
...
@@ -191,10 +191,10 @@ public class AES1 {
System
.
out
.
println
(
"加密解密"
);
String
content
=
"7424862e-ec4b-455c-95f1-f7f4cdcf3588"
;
System
.
out
.
println
(
"原内容为:"
+
content
);
String
encryContent
=
encryptAES
(
content
);
System
.
out
.
println
(
"加密后的内容为:"
+
encryContent
);
String
decryContent
=
decryptAES
(
encryContent
);
System
.
out
.
println
(
"解密后的内容为:"
+
decryContent
);
//
String encryContent = encryptAES(content);
//
System.out.println("加密后的内容为:" + encryContent);
//
String decryContent = decryptAES(encryContent);
//
System.out.println("解密后的内容为:" + decryContent);
}
}
\ No newline at end of file
src/main/java/com/hao/digitalsignature/encryption/AESmiyao.java
浏览文件 @
03b35aa6
...
...
@@ -12,7 +12,7 @@ public class AESmiyao {
/**
* 随机生成秘钥
*/
public
static
void
getKey
()
{
public
static
String
getKey
()
{
try
{
KeyGenerator
kg
=
KeyGenerator
.
getInstance
(
"AES"
);
kg
.
init
(
128
);
...
...
@@ -23,10 +23,12 @@ public class AESmiyao {
System
.
out
.
println
(
s
);
System
.
out
.
println
(
"十六进制密钥长度为"
+
s
.
length
());
System
.
out
.
println
(
"二进制密钥的长度为"
+
s
.
length
()*
4
);
return
s
;
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
System
.
out
.
println
(
"没有此算法。"
);
return
"error"
;
}
}
/**
...
...
src/main/java/com/hao/digitalsignature/encryption/DSASign.java
浏览文件 @
03b35aa6
...
...
@@ -100,7 +100,7 @@ public class DSASign {
//对消息摘要进行签名得到r和s,在使用RSA进行加密并发送
for
(
int
i
=
0
;
i
<
sig
.
length
;
i
++){
System
.
out
.
println
(
"签名:"
+
sig
[
i
].
toString
());
back
[
i
]=
new
BigInteger
(
RSAEncrypt
.
RSA
(
sig
[
i
].
toString
()));
back
[
i
]=
new
BigInteger
(
RSAEncrypt
.
RSA
en
(
sig
[
i
].
toString
()));
}
System
.
out
.
println
(
"\n需要解密的信息:"
+
back
[
0
]);
System
.
out
.
println
(
" "
+
back
[
1
]);
...
...
src/main/java/com/hao/digitalsignature/encryption/RSAEncrypt.java
浏览文件 @
03b35aa6
...
...
@@ -331,17 +331,10 @@ public class RSAEncrypt {
}
return
stringBuilder
.
toString
();
}
public
static
String
RSA
(
String
key
)
throws
Exception
{
String
publicPath
=
"C:\\Users\\10908"
;
//公匙存放位置
String
privatePath
=
"C:\\Users\\10908"
;
//私匙存放位置
public
static
String
RSAde
(
byte
[]
cipherData
)
throws
Exception
{
String
publicPath
=
"C:\\Users\\w10"
;
//公匙存放位置
String
privatePath
=
"C:\\Users\\w10"
;
//私匙存放位置
Base64
base64
=
new
Base64
();
String
signKey
=
key
;
// 公钥加密过程
byte
[]
cipherData
=
RSAEncrypt
.
encrypt
(
RSAEncrypt
.
loadPublicKeyByStr
(
RSAEncrypt
.
loadPublicKeyByFile
(
publicPath
)),
signKey
.
getBytes
());
String
cipher
=
new
String
(
base64
.
encode
(
cipherData
));
// 私钥解密过程
byte
[]
res
=
RSAEncrypt
.
decrypt
(
RSAEncrypt
.
loadPrivateKeyByStr
(
RSAEncrypt
.
loadPrivateKeyByFile
(
privatePath
)),
...
...
@@ -353,15 +346,25 @@ public class RSAEncrypt {
// System.out.println();
return
restr
;
}
public
static
byte
[]
RSAen
(
String
key
)
throws
Exception
{
String
publicPath
=
"C:\\Users\\w10"
;
//公匙存放位置
String
privatePath
=
"C:\\Users\\w10"
;
//私匙存放位置
Base64
base64
=
new
Base64
();
String
signKey
=
key
;
// 公钥加密过程
byte
[]
cipherData
=
RSAEncrypt
.
encrypt
(
RSAEncrypt
.
loadPublicKeyByStr
(
RSAEncrypt
.
loadPublicKeyByFile
(
publicPath
)),
signKey
.
getBytes
());
return
cipherData
;
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
String
publicPath
=
"C:\\Users\\
10908
"
;
//公匙存放位置
String
privatePath
=
"C:\\Users\\
10908
"
;
//私匙存放位置
String
publicPath
=
"C:\\Users\\
w10
"
;
//公匙存放位置
String
privatePath
=
"C:\\Users\\
w10
"
;
//私匙存放位置
Base64
base64
=
new
Base64
();
System
.
out
.
println
(
"--------------公钥加密私钥解密过程-------------------"
);
String
signKey
=
"
469468403832192271371540108180328462414842553340
"
;
String
signKey
=
"
92743764462052142627293439435630995500413457934;675096046721824647030786244037909370416702721699;NDY5QTI5NkIzOUYxQzU3NkJCREYzRjgyRUJCMEU1MDg5OTVEMEUxMUU4MDczRDk3QThGRDUxRkJCMzhBNDIyQTUyNjRDNzU2NDA3REI1N0UzNDlBQjlDM0M3NzFFMDQw;2023-04-22 12:16:23;\n
"
;
// 公钥加密过程
byte
[]
cipherData
=
RSAEncrypt
.
encrypt
(
RSAEncrypt
.
loadPublicKeyByStr
(
RSAEncrypt
.
loadPublicKeyByFile
(
publicPath
)),
signKey
.
getBytes
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录