使用Java对文件进行加密前端JavaScript对文件解密

在现代Web应用程序中,文件安全是至关重要的。很多时候,我们需要对敏感数据和文件进行加密以保护其安全性,尤其是在数据传输过程中。Java文件加密和前端文件解密是一种广泛使用的技术,它可以通过对文件进行加密和解密来保护文件安全性。

Java文件加密技术

Java文件加密技术通常涉及使用密钥对文件进行加密。常见的Java文件加密算法包括AES、DES、RSA等。下面是使用AES算法对Java文件进行加密的步骤:

1.初始化AES加密密钥。

2.使用密钥初始化加密器。

3.使用加密器将文件读入内存并加密。

4.将加密后的文件写入磁盘。

下面是一个简单的Java代码示例,使用AES算法对文件进行加密:

package com.ruoyi;
import org.springframework.util.StringUtils;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Base64;

public class CryptoUtils {

    //这个密钥需要是16位
    public static final String KEY_DES = "aaaaaaaabbbbbbbb";

    public static void main(String[] args) throws Exception {
        String old = "12345678";
        String target ="hy+A8P/oEYPdOpwfRVpgwg=="; // 加密后的字符串

        //解密
        System.out.println(CryptoUtils.aesDecryptForFront(target, CryptoUtils.KEY_DES));

        //加密
        System.out.println(CryptoUtils.aesEncryptForFront(old, CryptoUtils.KEY_DES));

        File file = new File("C:\\111.txt");
        // 以 byte 的形式读取,不改变文件数据的编码格式
        byte[] bytes = Files.readAllBytes(file.toPath());

        byte[] outFile = CryptoUtils.aesEncryptForFront(bytes, CryptoUtils.KEY_DES);
        OutputStream out = new BufferedOutputStream(new FileOutputStream("C:\\model1.zm"));
        out.write(outFile);
        
        // 这里生成加密后的文件后缀可以自定义
        File file = new File("C:\\\\model.zm");
        // 以 byte 的形式读取,不改变文件数据的编码格式
        byte[] bytes = Files.readAllBytes(file.toPath());
        byte[] outFile = CryptoUtils.aesDecryptForFront(bytes, CryptoUtils.KEY_DES);
        OutputStream out = new BufferedOutputStream(new FileOutputStream("C:\\model2.glb"));
        out.write(outFile);

    }


    /**
     * AES解密
     * @param encryptStr 密文
     * @param decryptKey 秘钥,必须为16个字符组成
     * @return 明文
     * @throws Exception
     */
    public static String aesDecryptForFront(String encryptStr, String decryptKey) {
        if (StringUtils.isEmpty(encryptStr) || StringUtils.isEmpty(decryptKey)) {
            return null;
        }
        try {
            byte[] encryptByte = Base64.getDecoder().decode(encryptStr);
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));
            byte[] decryptBytes = cipher.doFinal(encryptByte);
            return new String(decryptBytes);

        } catch (Exception var3) {
            var3.printStackTrace();
            return null;
        }
    }
    // AES解密文件
    public static byte[] aesDecryptForFront(byte[] bytes, String decryptKey) {
        if (StringUtils.isEmpty(bytes) || StringUtils.isEmpty(decryptKey)) {
            return null;
        }
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));
            return cipher.doFinal(bytes);

        } catch (Exception var3) {
            var3.printStackTrace();
            return null;
        }
    }
    /**
     * AES加密文本
     * @param content 明文
     * @param encryptKey 秘钥,必须为16个字符组成
     * @return 密文
     * @throws Exception
     */
    public static String aesEncryptForFront(String content, String encryptKey) {
        if (StringUtils.isEmpty(content) || StringUtils.isEmpty(encryptKey)) {
            return null;
        }
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));

            byte[] encryptStr = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));
            return Base64.getEncoder().encodeToString(encryptStr);

        } catch (Exception var3) {
            var3.printStackTrace();
            return null;
        }

    }
    // AES加密文件
    public static byte[] aesEncryptForFront(byte[] bytes, String encryptKey) {
        if (StringUtils.isEmpty(bytes) || StringUtils.isEmpty(encryptKey)) {
            return null;
        }
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));

            byte[] encryptStr = cipher.doFinal(bytes);
            return encryptStr;

        } catch (Exception var3) {
            var3.printStackTrace();
            return null;
        }

    }

}

Java文件加密技术

前端解密使用的是CryptoJS库,CryptoJS是一个JavaScript加密库,可以提供诸如AES、DES、SHA1等常见的加密算法。使用CryptoJS解密前端加密文件时,需要了解密钥和加密模式,以确保成功解密文件。

我们使用FileReader对象将文件读入内存,并在onload回调函数中使用CryptoJS解密文件内容。最后,我们将解密后的字符串输出到控制台中。

下面是一个简单的JavaScript代码示例,使用CryptoJS解密:


function init() {

    // 解密字符串
    const decPwd = myDecrypt("hy+A8P/oEYPdOpwfRVpgwg==", "aaaaaaaabbbbbbbb");
    console.log(decPwd);

    fetch('assets/models/model.zm', {
            responseType: 'arraybuffer'
        })
        .then(response => response.arrayBuffer())
        .then(data => {
            // console.log(data)
            let decPwd = myDecryptFile(data, "aaaaaaaabbbbbbbb");
            console.log(decPwd)
        })
        .catch(error => console.log(error));

    let loader1 = new THREE.FileLoader();
    // 加载一个文本文件,并把结果输出到控制台上
    loader1.load('assets/models/model1.zm', function(data) {
        console.log(data)
        const decPwd = myDecryptFile(data, "aaaaaaaabbbbbbbb");
        console.log(decPwd)
    });

    var fileReader = new FileReader();
    fileReader.onload = function(e) {
        var encrypted = e.target.result;
        var decrypted = CryptoJS.AES.decrypt(encrypted, passphrase);
        var plaintext = decrypted.toString(CryptoJS.enc.Utf8);
        console.log(plaintext);
    };
    fileReader.readAsText(fileInput.files[0]);
}

//解密方法
function myDecrypt(word, key) {
    var secretKey = CryptoJS.enc.Utf8.parse(key);
    var decrypt = CryptoJS.AES.decrypt(word, secretKey, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}

function myDecryptFile(word, key) {
    // console.log(word)
    var secretKey = CryptoJS.enc.Utf8.parse(key);
    var decrypt = CryptoJS.AES.decrypt(word, secretKey, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    // console.log(decrypt)
    // console.log(CryptoJS.enc.Utf8.stringify(decrypt))
    return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}

猜你喜欢

转载自blog.csdn.net/baidu_29701003/article/details/129413668
今日推荐