3

有没有办法在Java中加密和解密输入和输出流?谢谢

4

2 回答 2

13

看看 CipherInputStream 和 CipherOutputStream。

CipherInputStream由 InputStream 和Cipher组成,因此 read() 方法返回从底层 InputStream 读取但已由 Cipher 额外处理的数据。Cipher 在被 CipherInputStream 使用之前必须完全初始化。

例如,如果 Cipher 被初始化以进行解密,则 CipherInputStream 将尝试读取数据并对其进行解密,然后再返回解密的数据。

此类严格遵守其祖先类 java.io.FilterInputStream 和 java.io.InputStream 的语义,尤其是失败语义。此类具有在其祖先类中指定的那些方法,并覆盖它们。此外,此类捕获其祖先类未引发的所有异常。特别是skip方法跳过,可用方法只统计封装Cipher处理过的数据。

对于使用此类的程序员来说,不要使用未在此类中定义或覆盖的方法(例如后来添加到超类之一的新方法或构造函数),因为这些方法的设计和实现不太可能考虑对 CipherInputStream 的安全影响。


CipherOutputStream由 OutputStream 和Cipher组成,因此 write() 方法首先处理数据,然后再将其写入底层 OutputStream。密码必须在被 CipherOutputStream 使用之前完全初始化。

例如,如果密码被初始化为加密,CipherOutputStream 将在写出加密数据之前尝试加密数据。

此类严格遵守其祖先类 java.io.OutputStream 和 java.io.FilterOutputStream 的语义,尤其是失败语义。此类具有在其祖先类中指定的那些方法,并覆盖它们。此外,此类捕获其祖先类未引发的所有异常。

对于使用此类的程序员来说,不要使用未在此类中定义或覆盖的方法(例如后来添加到超类之一的新方法或构造函数),因为这些方法的设计和实现不太可能考虑对 CipherOutputStream 的安全影响。

于 2012-12-19T20:52:22.530 回答
2

您可以使用CipherOutputStreamCipherInputStream来加密或解密 Input/OutputStreams

于 2012-12-19T20:52:45.353 回答