JAVA安全笔记(三)-输入流加密
2017-01-30 16:43
267 查看
编程中会遇到对整个文件进行加密/解密或对网络通信进行加密/解密等。尽管可以先从流中读出字节,然后进行加密/解密,但使用Java中针对流提供的专门的类更加的方便。
2.初始化密码器Cipher
3.创建输入流
4.创建CipherInputStream对象
5.读取输入流
源代码
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流中读取数据,则在读取过程中会自动根据密码器中的设置进行加密
输入流的加密的技术要点
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流中读取数据,则在读取过程中会自动根据密码器中的设置进行加密
相关文章推荐
- Java安全学习笔记(十)-输出流的加密和解密
- java安全框架-Shiro学习笔记(八)-加密工具类
- Java安全学习笔记(十一)-RSA算法加密和解密
- 《黑马程序员》java笔记->多线程安全问题
- Java 学习笔记16:用ThreadLocal解决多线程安全问题
- 《Java Concurrency in Practice》 学习笔记--第二章:线程安全
- Java安全之对称加密、非对称加密、数字签名
- java 安全 加密 小解
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- java 安全 笔记
- Java加密与解密的艺术 笔记一
- JAVA IO 输入流 输出流 笔记(二)
- Java/JSP安全及加密
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java学习笔记26:webx安全配置问题
- java之jvm学习笔记四(安全管理器)
- Java学习笔记之语言基础――Java代码安全的概念
- Java的安全学习(包括加密,数字签名,证书和认证)
- Java安全之对称加密与非对称加密
- JAVA IO 输入流 输出流笔记(一)