Java 输入流的加密

概要:

实际编程中常针对流进行加密,如对整个文件进行加密/解密或对网络通信进行加密/解密等。尽管可以先从流中读出字节,然后进行加密/解密,但使用Java中针对流提供的专门的类更加方便。本实例以最简单的程序演示了针对输入流的加密和解密。

| |目录

技术要点

输入流的加密的技术要点如下:

  • 密钥生成。

  • 初始化密码器Cipher。

  • 创建输入流。

  • 创建CipherInputStream对象。

  • 读取输入流。

代码实现

说明:key1.dat的获取方式Java 创建对称密钥

    test.txt 在项目根目录新建一个文本文档随便输入一些内容即可

package net.xsoftlab.baike;
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("key1.dat");
		ObjectInputStream ob = new ObjectInputStream(f);
		Key k = (Key) ob.readObject();
		Cipher cp = Cipher.getInstance("DESede");// 创建密码器
		cp.init(Cipher.ENCRYPT_MODE, k);// 初始化密码器
		FileInputStream in = new FileInputStream("test.txt");// 创建要加密的输入流
		CipherInputStream cin = new CipherInputStream(in, cp);// 创建CipherInputStream对象
		int b = 0;
		int i = 1;
		FileOutputStream out = new FileOutputStream("E_InStream.dat");// 将密文保存到指定的文件中
		System.out.println("对文件输入流加密的密文如下:");
		while ((b = cin.read()) != -1) {// 读取输入流
			System.out.print((byte) b + "  ");
			out.write(b);
			i++;
			if (i % 20 == 0)
				System.out.println();// 打印格式控制
		}
	}
}

程序解读

  1. "FileInputStream f=new FileInputStream("key1.dat");"语句从文件中读取以前保存的密钥,这样保证了本实例所用的密钥和以前相同,以便于对比加密结果。

  2. "FileInputStream in=new FileInputStream("file|file.doc");"语句的作用是创建要加密的输入流,本程序是以加密文件为例,因此创建文件输入流,文件名为file.doc。

  3. "CipherInputStream cin=new CipherInputStream(in,cp);"语句的作用是创建CipherInputStream对象,根据前面所创建好的密码器和输入流为参数构造CipherInputStream对象。

  4. 与java.io包中的基本的输入流一样使用read()方法从CipherInputStream流中读取数据,则在读取过程中会自动根据密码器中的设置进行加密。


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
  • 全部评论(0)
资料加载中...
已关注 , 取消