Java文件加密與解密


使用Java的二進制IO,對文件每個字節的數據進行修改,從而達到加密的目的。默認的加密方法是每個字節的數據+5,解密方法則是-5。

不用擔心數字的值超過255而溢出,超過之后的值會減256從而回到0~255。

上代碼

import java.io.*;

public class EncryptionAndDeciphering {

    private static final int OFFSET = 5;
    private static final String ENCRYPTION_PREFIX = "Encrypted_";
    private static final String DECIPHER_PREFIX = "Deciphered_";

    public static boolean changeFile(File inFile, int offset, String prefix) {
        //check input file
        if (!inFile.exists()) {
            System.out.println("File does not exist");
            return false;
        }

        //create output file
        File outFile = new File(prefix + inFile.getName());
        if (outFile.exists()) {
            return false;
        }
        try {
            if (!outFile.createNewFile()) {
                return false;
            }
        } catch (IOException e) {
            return false;
        }

        //IO
        try (
                BufferedInputStream input = new BufferedInputStream(new FileInputStream(inFile));
//                FileInputStream input = new FileInputStream(inFile);
                BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(outFile));
//                FileOutputStream output = new FileOutputStream(outFile);
        ) {
            int value;
            for (; ; ) {
                value = input.read();
                if (value == -1) {
                    break;
                }
                output.write(value + offset); //change
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public static boolean encryptFile(File inFile, int offset, String prefix) {
        return changeFile(inFile, offset, prefix);
    }

    public static boolean encryptFile(File inFile) {
        return changeFile(inFile, OFFSET, ENCRYPTION_PREFIX);
    }

    public static boolean decipherFile(File inFile, int offset, String prefix) {
        return changeFile(inFile, -offset, prefix);
    }

    public static boolean decipherFile(File inFile) {
        return changeFile(inFile, -OFFSET, DECIPHER_PREFIX);
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM