Apache Codec Base16InputStream/Base16OutputStream 文件流加密解密

本文将介绍使用 Base16InputStream/Base16OutputStream 对文件进行加密和解密

Base16InputStream

以流方式 (无限大小) 提供 base 16 编码和解码。Base16InputStream 的默认行为是解码,而 Base16OutputStream 的默认行为是编码,但是可以通过使用不同的构造函数来覆盖此行为。

Base16InputStream 常用构造方法定义如下:

  • Base16InputStream(InputStream in)

    创建一个 Base16InputStream 实例,这样所有从 InputStream 参数读取的数据都可以自动解码。

  • Base16InputStream(InputStream in, boolean doEncode)

    创建一个 Base16InputStream 实例,这样所有从 InputStream 读取的数据可以通过 doEncode 参数控制是加密还是解密。

  • Base16InputStream(InputStream in, boolean doEncode, boolean lowerCase)

    创建一个 Base16InputStream 实例,这样所有从 InputStream 读取的数据可以通过 doEncode 参数控制是加密还是解密。

  • Base16InputStream(InputStream in, boolean doEncode, boolean lowerCase, CodecPolicy decodingPolicy)

    创建一个 Base16InputStream 实例,根据指定的策略将所有从 InputStream 读取的数据可以通过 doEncode 参数控制是加密还是解密。

Base16OutputStream

以流方式 (无限大小) 提供十六进制编码和解码。HexOutputStream 的默认行为是编码,而 Base16InputStream 的默认行为是解码。但是,可以通过使用不同的构造函数来重写此行为。

  • Base16OutputStream(OutputStream out)

    创建一个 Base16OutputStream 实例,这样所有数据都被十六进制编码输出到参数 OutputStream 输出流中。

  • Base16OutputStream(OutputStream out, boolean doEncode)

    创建一个 Base16OutputStream 实例,将所有数据要么是十六进制编码,要么是十六进制解码,然后将编解码结果输出到 OutputStream 输出流。

  • Base16OutputStream(OutputStream out, boolean doEncode, boolean lowerCase)

    创建一个 Base16OutputStream 实例,将所有数据要么是十六进制编码,要么是十六进制解码,然后将编解码结果输出到 OutputStream 输出流。

  • Base16OutputStream(OutputStream out, boolean doEncode, boolean lowerCase, CodecPolicy decodingPolicy)

    创建一个 Base16OutputStream 实例,根据指定的策略将所有数据要么是十六进制编码,要么是十六进制解码,然后将编解码结果输出到 OutputStream 输出流。

实例代码

(1)读取一个文件的内容,然后将文件内容进行解密/加密,代码如下:

package com.huangx.codec.base16;

import org.apache.commons.codec.binary.Base16InputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class Base16Demo3 {

    public static void main(String[] args) throws IOException {
        // 默认数据是解密,encode.txt 文件存放 Base16 加密后的字符串
        InputStream inputStream = Base16Demo3.class.getResourceAsStream("/encode.txt");
        if(null == inputStream) {
            throw new FileNotFoundException("没有找到资源文件 source.txt");
        }
        Base16InputStream base16InputStream = new Base16InputStream(inputStream);
        byte[] buffer = new byte[1024];
        int length = base16InputStream.read(buffer);
        System.out.println(new String(buffer, 0, length));

        // 设置为加密
        InputStream inputStream2 = Base16Demo3.class.getResourceAsStream("/source.txt");
        if(null == inputStream2) {
            throw new FileNotFoundException("没有找到资源文件 source.txt");
        }
        Base16InputStream base16 = new Base16InputStream(inputStream2, true);
        byte[] bytes = new byte[1024];
        int len;
        while((len = base16.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, len));
        }
    }

}

(2)使用 Base16OutputStream 输出数据,这些数据将自动加密。代码如下:

package com.huangx.codec.base16;

import org.apache.commons.codec.binary.Base16OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class Base16Demo4 {

    public static void main(String[] args) throws IOException {
        String str = "床前明月光,疑是地上霜。举头望明月,低头思故乡。";
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        Base16OutputStream base16OutputStream = new Base16OutputStream(outputStream, true);
        base16OutputStream.write(str.getBytes());
        base16OutputStream.flush();
        base16OutputStream.close();

        byte[] result = outputStream.toByteArray();
        System.out.println(new String(result));
    }

}
真理惟一可靠的标准就是永远自相符合。 —— 欧文
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号