0
收藏
微博
微信
复制链接

怕Java泄露信息?不如给文件加密吧!

2024-10-12 11:18
17

很多Java人都有这样的经历吧,有时候需要对源代码或某些敏感数据进行加密,避免泄露,以此保护知识产权或用户隐私,但是不知道咋做,这种我们可以用上Java的文件加密库javax.crypto!

image.png

下面是一个使用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);  

}


本文凡亿教育原创文章,转载请注明来源!

登录后查看更多
0
评论 0
收藏
侵权举报
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。

热门评论0

相关文章

小白电子

一个从小白过来的电子工程师,并且想让更多的电子小白变成对国家有用的电子设计工程师

开班信息