很多Java人都有这样的经历吧,有时候需要对源代码或某些敏感数据进行加密,避免泄露,以此保护知识产权或用户隐私,但是不知道咋做,这种我们可以用上Java的文件加密库javax.crypto!
下面是一个使用AES(高级加密标准)算法对文件进行加密和解密的示例。
依赖库
无需额外依赖,Java标准库已包含javax.crypto。
1、导入必要的包
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.SecureRandom;
import java.util.Base64;
2、生成密钥
public static SecretKey generateKey(int n) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(n, new SecureRandom());
return keyGenerator.generateKey();
}
3、加密文件
public static void encryptFile(String inputFile, String outputFile, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] inputBytes = Files.readAllBytes(Paths.get(inputFile));
byte[] outputBytes = cipher.doFinal(inputBytes);
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
fos.write(outputBytes);
}
}
4、解密文件
public static void decryptFile(String inputFile, String outputFile, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] inputBytes = Files.readAllBytes(Paths.get(inputFile));
byte[] outputBytes = cipher.doFinal(inputBytes);
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
fos.write(outputBytes);
}
}
5、主方法示例
public static void main(String[] args) throws Exception {
String inputFilePath = "path/to/your/input/file.txt";
String encryptedFilePath = "path/to/your/encrypted/file.enc";
String decryptedFilePath = "path/to/your/decrypted/file.txt";
// 生成密钥
SecretKey key = generateKey(256);
String keyStr = Base64.getEncoder().encodeToString(key.getEncoded());
System.out.println("Key: " + keyStr); // 保存密钥以便解密
// 加密文件
encryptFile(inputFilePath, encryptedFilePath, key);
// 解密文件
decryptFile(encryptedFilePath, decryptedFilePath, key);
}
本文凡亿教育原创文章,转载请注明来源!