java 文件加密
时间: 2023-08-12 19:07:46 浏览: 87
Java 中可以使用加密算法对文件进行加密,常用的加密算法有对称加密算法,如 AES、DES 等,以及非对称加密算法,如 RSA 等。
对称加密算法需要使用同一个密钥进行加密和解密,因此需要确保密钥的安全性。可以使用 Java 中的 javax.crypto 包来实现对称加密,其中 Cipher 类可以实现加密和解密操作。以下是一个简单的对称加密示例:
```java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class FileEncryptor {
public static void main(String[] args) throws Exception {
String key = "my-secret-key"; // 密钥
String inputFile = "input.txt"; // 待加密的文件
String outputFile = "output.txt"; // 加密后的文件
byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] inputBytes = Files.readAllBytes(Paths.get(inputFile));
byte[] outputBytes = cipher.doFinal(inputBytes);
String encodedOutput = Base64.getEncoder().encodeToString(outputBytes);
Files.write(Paths.get(outputFile), encodedOutput.getBytes(StandardCharsets.UTF_8));
}
}
```
非对称加密算法需要使用一对公钥和私钥进行加密和解密,其中公钥可以公开,私钥需要保存在安全的地方。可以使用 Java 中的 java.security 包来实现非对称加密,其中 KeyPairGenerator 类可以生成一对公钥和私钥,Cipher 类可以实现加密和解密操作。以下是一个简单的非对称加密示例:
```java
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;
import javax.crypto.Cipher;
public class FileEncryptor {
public static void main(String[] args) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
String inputFile = "input.txt"; // 待加密的文件
String outputFile = "output.txt"; // 加密后的文件
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] inputBytes = Files.readAllBytes(Paths.get(inputFile));
byte[] outputBytes = cipher.doFinal(inputBytes);
String encodedOutput = Base64.getEncoder().encodeToString(outputBytes);
Files.write(Paths.get(outputFile), encodedOutput.getBytes(StandardCharsets.UTF_8));
}
}
```
阅读全文