這篇文章給大家分享的是java為文件加密的方法。小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí)。如下資料是關(guān)于設(shè)置環(huán)境變量的內(nèi)容。
創(chuàng)新互聯(lián)公司長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鄂倫春企業(yè)提供專業(yè)的網(wǎng)站制作、網(wǎng)站設(shè)計(jì),鄂倫春網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
用輸入緩沖字節(jié)流讀取文件內(nèi)容到緩沖區(qū)內(nèi),再用字節(jié)數(shù)組輸出緩沖流寫到一個(gè)字節(jié)數(shù)組內(nèi)
// 第一步文件的加密 // 先用字節(jié)緩沖流讀取文件 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(“你要加密的文件全路徑”)); // 再用字節(jié)數(shù)組輸出流將文件寫到一個(gè)字節(jié)數(shù)組內(nèi) ByteArrayOutputStream baos = new ByteArrayOutputStream(); 調(diào)用writeFile2方法寫到一個(gè)字節(jié)數(shù)組內(nèi) writeFile2(baos, bis) // 將字節(jié)數(shù)組輸出流內(nèi)的內(nèi)容轉(zhuǎn)換成一個(gè)字節(jié)數(shù)組 byte[] byteArray = baos.toByteArray();
writeFile2方法: /** private static void writeFile2(ByteArrayOutputStream baos, BufferedInputStream bis) throws Exception { byte [] bytes = new byte [1024]; int len = -1; while ((len= bis.read(bytes))!=-1) { baos.write(bytes, 0, len); } bis.close(); }
通過(guò)對(duì)數(shù)組內(nèi)每個(gè)數(shù)據(jù)進(jìn)行異或運(yùn)算實(shí)現(xiàn)加密,因?yàn)楫惢蛲粋€(gè)數(shù)兩次還是原來(lái)本身,通過(guò)這個(gè)實(shí)現(xiàn)加密和解密
private static byte[] jiami(byte[] byteArray) { for (int i = 0; i < byteArray.length; i++) { byteArray[i] = (byte) (byteArray[i] ^ 96);// 將異或后的數(shù)據(jù)強(qiáng)轉(zhuǎn)成字節(jié)類型 } return byteArray; }
將數(shù)組內(nèi)容分成三份。
int size = byteArray.length / 3; byte[] byteArray1 = new byte[size]; byte[] byteArray2 = new byte[size]; byte[] byteArray3 = new byte[byteArray.length-2*size]; for (int i = 0; i < size; i++) { byteArray1[i] = byteArray[i]; } for (int i = size; i < 2*size; i++) { byteArray2[i - size] = byteArray[i]; } for (int i = size * 2; i < byteArray.length; i++) { byteArray3[i - size * 2] = byteArray[i]; }
4.將這些分好的數(shù)組通過(guò)流的方式寫到具體的文件內(nèi)
ByteArrayInputStream bais = null; BufferedOutputStream bos = null; for (int i = 0; i < 3; i++) { switch (i) { case 0:// 第一份 bais = new ByteArrayInputStream(byteArray1); // 用字節(jié)緩沖輸出流將數(shù)組內(nèi)容寫到具體的位置 bos = new BufferedOutputStream(new FileOutputStream("F:/test/111.dll")); // 下面還要用到這個(gè)方法寫數(shù)據(jù)的方法,可以定義一個(gè)方法 writeFile(size, bais, bos, 0); break; case 1:// 第二份 bais = new ByteArrayInputStream(byteArray2); // 用字節(jié)緩沖輸出流將數(shù)組內(nèi)容寫到具體的位置 bos = new BufferedOutputStream(new FileOutputStream("F:/test/112.dll")); writeFile(size, bais, bos, 1); break; case 2:// 第三份 bais = new ByteArrayInputStream(byteArray3); bos = new BufferedOutputStream(new FileOutputStream("F:/test/113.dll")); writeFile(byteArray.length-2*size, bais, bos, 2); break; } }
writeFile方法 private static void writeFile(int size, ByteArrayInputStream bais, BufferedOutputStream bos, int i) throws Exception { byte[] bytes = new byte[1024]; int len = -1; while ((len = bais.read(bytes)) != -1) { bos.write(bytes, 0, len); } bos.close(); }
關(guān)于java為文件加密的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。