简单基础版本加密解密工具类
public class FileEncryptionUtils {
private static final String ENCRYPTION_KEY = "1234567890123456";
private static final String IV = "your-iv-12345678";
public static MultipartFile encryptFile(MultipartFile file) {
try {
byte[] fileData = file.getBytes();
byte[] encryptedData = encrypt(fileData);
String fileName = file.getOriginalFilename();
String encryptedFileName = "encrypted_" + fileName;
String encryptedFilePath = Paths.get(System.getProperty("user.home"), "Desktop", encryptedFileName).toString();
FileOutputStream outputStream = new FileOutputStream(encryptedFilePath);
outputStream.write(encryptedData);
outputStream.close();
File encryptedFile = new File(encryptedFilePath);
FileInputStream encryptedFileInputStream = new FileInputStream(encryptedFile);
return new MultipartFile() {
@Override
public String getName() {
return encryptedFile.getName();
}
@Override
public String getOriginalFilename() {
return encryptedFile.getName();
}
@Override
public String getContentType() {
return "application/octet-stream";
}
@Override
public boolean isEmpty() {
return encryptedFile.length() == 0;
}
@Override
public long getSize() {
return encryptedFile.length();
}
@Override
public byte[] getBytes() throws IOException {
byte[] bytes = new byte[(int) encryptedFile.length()];
encryptedFileInputStream.read(bytes);
return bytes;
}
@Override
public InputStream getInputStream() throws IOException {
return encryptedFileInputStream;
}
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
// Not required for this test
}
};
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static MultipartFile decryptFile(MultipartFile file) {
try {
byte[] encryptedData = file.getBytes();
byte[] decryptedData = decrypt(encryptedData);
String fileName = file.getOriginalFilename();
String decryptedFileName = "decrypted_" + fileName.replace("encrypted_", "");
String decryptedFilePath = Paths.get(System.getProperty("user.home"), "Desktop", decryptedFileName).toString();
FileOutputStream outputStream = new FileOutputStream(decryptedFilePath);
outputStream.write(decryptedData);
outputStream.close();
File decryptedFile = new File(decryptedFilePath);
FileInputStream decryptedFileInputStream = new FileInputStream(decryptedFile);
return new MultipartFile() {
@Override
public String getName() {
return decryptedFile.getName();
}
@Override
public String getOriginalFilename() {
return decryptedFile.getName();
}
@Override
public String getContentType() {
return "application/octet-stream";
}
@Override
public boolean isEmpty() {
return decryptedFile.length() == 0;
}
@Override
public long getSize() {
return decryptedFile.length();
}
@Override
public byte[] getBytes() throws IOException {
byte[] bytes = new byte[(int) decryptedFile.length()];
decryptedFileInputStream.read(bytes);
return bytes;
}
@Override
public InputStream getInputStream() throws IOException {
return decryptedFileInputStream;
}
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
// Not required for this test
}
};
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private static byte[] encrypt(byte[] data) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(ENCRYPTION_KEY.getBytes(), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
return cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static byte[] decrypt(byte[] encryptedData) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(ENCRYPTION_KEY.getBytes(), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
return cipher.doFinal(encryptedData);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//测试使用String转MultipartFile
public static MultipartFile convertFromFile(String filePath) {
try {
Path path = Paths.get(filePath);
String fileName = path.getFileName().toString();
String contentType = Files.probeContentType(path);
byte[] content = Files.readAllBytes(path);
return new MockMultipartFile(fileName, fileName, contentType, content);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String imageFilePath = "C:\\Users\\13011\\Desktop\\音乐 - 副本.mp3";
String videoFilePath = "C:\\Users\\13011\\Desktop\\微信图片_20230713091656.jpg";
String audioFilePath = "C:\\Users\\13011\\Desktop\\video_2023-07-12_15-29-07.mp4";
String txtFilePath = "C:\\Users\\13011\\Desktop\\新建文本文档 (3).txt";
MultipartFile imageFile = convertFromFile(imageFilePath);
MultipartFile videoFile = convertFromFile(videoFilePath);
MultipartFile audioFile = convertFromFile(audioFilePath);
MultipartFile txtFile = convertFromFile(txtFilePath);
MultipartFile encryptedImageFile = encryptFile(imageFile);
FileTypeUtils.getFileType(imageFile);
MultipartFile decryptedImageFile = decryptFile(encryptedImageFile);
FileTypeUtils.getFileType(decryptedImageFile);
/*MultipartFile encryptedVideoFile = encryptFile(videoFile);
FileTypeUtils.getFileType(encryptedVideoFile);
MultipartFile decryptedVideoFile = decryptFile(encryptedVideoFile);
FileTypeUtils.getFileType(decryptedVideoFile);
MultipartFile encryptedAudioFile = encryptFile(audioFile);
FileTypeUtils.getFileType(encryptedAudioFile);
MultipartFile decryptedAudioFile = decryptFile(encryptedAudioFile);
FileTypeUtils.getFileType(decryptedAudioFile);
MultipartFile encryptedtxtFile = encryptFile(txtFile);
FileTypeUtils.getFileType(encryptedtxtFile);
MultipartFile decryptedtxtFile = decryptFile(encryptedtxtFile);
FileTypeUtils.getFileType(decryptedtxtFile);
*/
}
}