【问题标题】:En/Decrypting an In/Output stream in Java? [closed]在Java中加密/解密输入/输出流? [关闭]
【发布时间】:2012-12-19 20:49:34
【问题描述】:

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

【问题讨论】:

  • CipherInputStream 和 CipherOutputStream
  • 除了使用加密,我建议使用压缩。这将使流 a)稍微难以解密,因为它会更随机 b)更小 c)如果您获得不错的压缩比,可能更快。我建议使用 Deflator 和 Inflator 流。
  • Here a full sample 如何使用流加密和解密
  • “不是一个真正的问题” bruh

标签: java security encryption stream


【解决方案1】:

查看 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 的安全影响。

【讨论】:

  • 伙计,不要奖励那些明显没有努力做任何事情的人提出这样的问题。
  • 好吧,我知道这个类是存在的,但我需要 2 分钟才能找到它们。有时很难找到正确的关键词。
【解决方案2】:

您可以使用CipherOutputStreamCipherInputStream 来加密或解密输入/输出流

【讨论】:

    猜你喜欢
    • 2019-04-19
    • 2021-03-09
    • 2015-06-18
    • 2011-09-29
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    相关资源
    最近更新 更多