视频音频图片文档加密解密

该代码提供了一个简单的Java类`FileEncryptionUtils`,用于对`MultipartFile`对象进行AES加密和解密。类中使用了固定的加密钥和初始化向量,加密和解密过程涉及字节数据的读写,并将结果保存到用户的桌面。此外,还包含了一个方法将本地文件转换为`MultipartFile`对象以便处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单基础版本加密解密工具类



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);
*/


    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值