温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java File文件加密解密方法有哪些

发布时间:2025-09-03 23:47:59 来源:亿速云 阅读:107 作者:小樊 栏目:编程语言

在Java中,有多种方法可以对文件进行加密和解密。以下是一些常用的方法:

1. 使用Java Cryptography Extension (JCE)

Java Cryptography Extension (JCE) 提供了强大的加密和解密功能。你可以使用它来实现对称加密(如AES)和非对称加密(如RSA)。

示例:使用AES进行文件加密和解密

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.security.NoSuchAlgorithmException;

public class FileEncryption {

    public static void encryptFile(String key, String inputFile, String outputFile) throws Exception {
        doCrypto(Cipher.ENCRYPT_MODE, key, inputFile, outputFile);
    }

    public static void decryptFile(String key, String inputFile, String outputFile) throws Exception {
        doCrypto(Cipher.DECRYPT_MODE, key, inputFile, outputFile);
    }

    private static void doCrypto(int cipherMode, String key, String inputFile, String outputFile) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(cipherMode, secretKey);

        FileInputStream inputStream = new FileInputStream(inputFile);
        byte[] inputBytes = new byte[(int) new File(inputFile).length()];
        inputStream.read(inputBytes);

        byte[] outputBytes = cipher.doFinal(inputBytes);

        FileOutputStream outputStream = new FileOutputStream(outputFile);
        outputStream.write(outputBytes);

        inputStream.close();
        outputStream.close();
    }

    public static void main(String[] args) {
        try {
            String key = "ThisIsASecretKey"; // 16 bytes key for AES
            String inputFile = "input.txt";
            String encryptedFile = "encrypted.txt";
            String decryptedFile = "decrypted.txt";

            encryptFile(key, inputFile, encryptedFile);
            decryptFile(key, encryptedFile, decryptedFile);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

2. 使用Java Secure Random

为了增强安全性,可以使用Java Secure Random生成随机密钥。

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;

public class SecureRandomKeyGenerator {

    public static SecretKey generateKey(int n) throws NoSuchAlgorithmException {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(n);
        SecretKey secretKey = keyGenerator.generateKey();
        return secretKey;
    }

    public static void main(String[] args) {
        try {
            SecretKey secretKey = generateKey(128);
            System.out.println("Generated Key: " + secretKey.getEncoded());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

3. 使用第三方库

还有一些第三方库可以简化文件加密和解密的过程,例如:

  • Bouncy Castle: 一个功能强大的加密库,提供了广泛的加密算法和协议。
  • Apache Commons Codec: 提供了一些编码和解码工具,可以用于处理加密后的数据。

示例:使用Bouncy Castle进行文件加密和解密

首先,添加Bouncy Castle依赖到你的项目中(例如,使用Maven):

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.68</version>
</dependency>

然后,使用Bouncy Castle进行加密和解密:

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.security.Security;

public class BouncyCastleEncryption {

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    public static void encryptFile(String key, String inputFile, String outputFile) throws Exception {
        doCrypto(Cipher.ENCRYPT_MODE, key, inputFile, outputFile);
    }

    public static void decryptFile(String key, String inputFile, String outputFile) throws Exception {
        doCrypto(Cipher.DECRYPT_MODE, key, inputFile, outputFile);
    }

    private static void doCrypto(int cipherMode, String key, String inputFile, String outputFile) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "BC");
        cipher.init(cipherMode, secretKey);

        FileInputStream inputStream = new FileInputStream(inputFile);
        byte[] inputBytes = new byte[(int) new File(inputFile).length()];
        inputStream.read(inputBytes);

        byte[] outputBytes = cipher.doFinal(inputBytes);

        FileOutputStream outputStream = new FileOutputStream(outputFile);
        outputStream.write(outputBytes);

        inputStream.close();
        outputStream.close();
    }

    public static void main(String[] args) {
        try {
            String key = "ThisIsASecretKey"; // 16 bytes key for AES
            String inputFile = "input.txt";
            String encryptedFile = "encrypted.txt";
            String decryptedFile = "decrypted.txt";

            encryptFile(key, inputFile, encryptedFile);
            decryptFile(key, encryptedFile, decryptedFile);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

这些方法可以帮助你在Java中实现文件的加密和解密。选择哪种方法取决于你的具体需求和安全要求。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI