如何用java給文件加密的簡單實現(xiàn)
思路:文件加密,簡單來說就是把文件讀取出來,把讀取出來的字節(jié)碼數(shù)組進(jìn)行遍歷,把每一個碼值和一個秘鑰(隨便一個數(shù))進(jìn)行異或運算,將運算后的結(jié)果全部寫入到文件里。因為文件的碼值全都做了改變,文件自然就無法打開了,這是加密過程。解密過程就是再執(zhí)行一次,因為數(shù)字對另一個數(shù)進(jìn)行兩次異或運算等于數(shù)字本身。再異或一次碼值就恢復(fù)原樣了,文件自然也就可以恢復(fù)原樣。
文件加密
import java.io.*; import java.util.ArrayList; import java.util.List; /** * 文件加密 */ public class FileEncrypt { public static void main(String[] args) throws IOException { // 需要加密/解密的文件路徑 String inputPath = "out.txt"; // 加密/解密后的文件路徑 String outPath = "input.txt"; // 用于存儲文件字節(jié)碼的集合數(shù)組 List<Byte> byteList = new ArrayList<>(); // 秘鑰 Byte key = 17; // 讀取文件 readFile(inputPath, byteList); // 加密/解密 encryption(byteList, key); // 生成加密/解密后的文件 writeText(byteList, outPath); } /** * 讀取文件 * * @param inputPath 文件輸入路徑 * @param byteList 文件的字節(jié)碼列表 * @throws IOException */ public static void readFile(String inputPath, List<Byte> byteList) throws IOException { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputPath)); byte[] bytes = new byte[1024]; int len; while ((len = bis.read(bytes)) != -1) { for (int i = 0; i < len; i++) { byteList.add(bytes[i]); } } bis.close(); } /** * 加密/解密 * * @param byteList * @param key */ public static void encryption(List<Byte> byteList, byte key) { for (int i = 0; i < byteList.size(); i++) { Byte aByte = byteList.get(i); // 把集合中的字節(jié)碼與秘鑰或運算 Byte enNum = (byte) (aByte ^ key); // 把加密后的數(shù)替換原集合中的數(shù) byteList.set(i, enNum); } } /** * 生成加密/解密后的文件 * * @param byteList * @param outPath * @throws IOException */ public static void writeText(List<Byte> byteList, String outPath) throws IOException { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outPath)); byte[] tempByte = new byte[byteList.size()]; for (int i = 0; i < byteList.size(); i++) { tempByte[i] = byteList.get(i); } bos.write(tempByte); bos.close(); } }
input.txt文件內(nèi)容
將input的內(nèi)容加密后,寫入out.txt中
文件解密
總結(jié)
這就是對文件內(nèi)容加密的簡單實現(xiàn),這里的文件可以換成圖片或者其他類型的文件,都可以。另外,完全可以把inputPath和outPath設(shè)置成一樣,這樣就不會產(chǎn)生新文件了,運行一次文件加密,再運行一次,文件解密,非常方便。
到此這篇關(guān)于如何用java給文件加密的簡單實現(xiàn)的文章就介紹到這了,更多相關(guān)java文件加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解基于Spring Cloud幾行配置完成單點登錄開發(fā)
這篇文章主要介紹了詳解基于Spring Cloud幾行配置完成單點登錄開發(fā),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02關(guān)于idea中出現(xiàn)nbsp和zwsp的完美解決辦法
本文給大家介紹關(guān)于idea中出現(xiàn)nbsp和zwsp的解決辦法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-06-06Springboot整合mybatis開啟二級緩存的實現(xiàn)示例
在一級緩存中,是查詢兩次數(shù)據(jù)庫的,顯然這是一種浪費,既然SQL查詢相同,就沒有必要再次查庫了,直接利用緩存數(shù)據(jù)即可,這種思想就是MyBatis二級緩存的初衷,本文就詳細(xì)的介紹了Springboot整合mybatis開啟二級緩存,感興趣的可以了解一下2022-05-05SpringBoot如何實現(xiàn)持久化登錄狀態(tài)獲取
這篇文章主要介紹了SpringBoot 如何實現(xiàn)持久化登錄狀態(tài)獲取,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Java 高并發(fā)二:多線程基礎(chǔ)詳細(xì)介紹
本文主要介紹Java 高并發(fā)多線程的知識,這里整理詳細(xì)的資料來解釋線程的知識,有需要的學(xué)習(xí)高并發(fā)的朋友可以參考下2016-09-09使用feign服務(wù)調(diào)用添加Header參數(shù)
這篇文章主要介紹了使用feign服務(wù)調(diào)用添加Header參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06