输入流的加密的技术要点
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流中读取数据,则在读取过程中会自动根据密码器中的设置进行加密