JAVA安全筆記(三)-輸入流加密
阿新 • • 發佈:2018-12-30
程式設計中會遇到對整個檔案進行加密/解密或對網路通訊進行加密/解密等。儘管可以先從流中讀出位元組,然後進行加密/解密,但使用Java中針對流提供的專門的類更加的方便。
2.初始化密碼器Cipher
3.建立輸入流
4.建立CipherInputStream物件
輸入流的加密的技術要點
1.金鑰生成2.初始化密碼器Cipher
3.建立輸入流
4.建立CipherInputStream物件
5.讀取輸入流
原始碼
package ende; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.CipherInputStream; public class E_InStream { public static void main(String[] args) throws Exception { //生成金鑰 FileInputStream f=new FileInputStream("C:\\Users\\Administrator\\Desktop\\key1.dat"); ObjectInputStream ob=new ObjectInputStream(f); Key k=(Key)ob.readObject(); Cipher cp=Cipher.getInstance("DESede");//建立密碼器 cp.init(Cipher.ENCRYPT_MODE, k); //cp的初始化模式為加密模式ENCRYPT_MODE,以及金鑰k FileInputStream in=new FileInputStream("C:\\Users\\Administrator\\Desktop\\file.txt"); //建立要加密的輸入流,txt文件格式 CipherInputStream cin=new CipherInputStream(in, cp);//建立CipherInputstream物件 int b=0; int i=1; FileOutputStream out =new FileOutputStream("C:\\Users\\Administrator\\Desktop\\E_InStream.dat");//將密文儲存到指定的檔案中 System.out.println("對檔案輸入流加密的密文如下:"); while((b= cin.read())!=-1){ //讀輸入流 System.out.print((byte) b+" "); out.write((byte)b); // 書中程式碼中漏掉的,要往檔案中寫 i++; if(i%30 == 0) System.out.println(); } } }
file.txt檔案放置的檔案內容為test
源程式解讀
(1)FileInputStream f=new FileInputStream("C:\\Users\\Administrator\\Desktop\\key1.dat");
語句從檔案中讀取以前儲存的金鑰,這個key1.dat的生成也是由程式執行生成的,這個程式出自 Java安全筆記(二)-建立對稱金鑰
這樣可以保證本例項所用的金鑰和以前相同,以便對比加密結果
(2)FileInputStream in=new FileInputStream("C:\\Users\\Administrator\\Desktop\\file.txt");
語句的作用是建立要加密的輸入流,本程式是以加密檔案為例,因此建立檔案輸入流,檔名為file.txt,
教材中為file.doc,doc格式的檔案在加密後解密的時候會亂碼,暫時用txt格式的檔案。
(3)CipherInputStream cin=new CipherInputStream(in, cp);
語句的作用是建立CipherInputStream物件,根據前面所建立的密碼器和輸入流為引數構造CipherInputStream物件
(4) 與java.io包中的基本的輸入流一樣使用read()方法從CipherInputStream流中讀取資料,則在讀取過程中會自動根據密碼器中的設定進行加密