您的位置:首页 > 编程语言 > Java开发

JAVA安全笔记(三)-输入流加密

2017-01-30 16:43 267 查看
编程中会遇到对整个文件进行加密/解密或对网络通信进行加密/解密等。尽管可以先从流中读出字节,然后进行加密/解密,但使用Java中针对流提供的专门的类更加的方便。

输入流的加密的技术要点

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 解密 安全