提交 03b35aa6 编写于 作者: H hml

默认的

上级 6bf321b8
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();
......
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";
......
......@@ -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
......@@ -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";
}
}
/**
......
......@@ -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.RSAen(sig[i].toString()));
}
System.out.println("\n需要解密的信息:"+back[0]);
System.out.println(" "+back[1]);
......
......@@ -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.
先完成此消息的编辑!
想要评论请 注册