gpt4 book ai didi

java - SealedObject 与 Stream Cypher,优缺点

转载 作者:行者123 更新时间:2023-11-29 09:32:18 24 4
gpt4 key购买 nike

我有两种加密和解密 java 对象的方法:

a) 使用 SealedObject 并使用普通的 FileOutputStreamFileInputStream 保存和加载它

b) 使用CipherOutputStreamCipherInputStream 保存序列化对象

这两种选择在性能和/或安全性方面是否存在差异?

最佳答案

密封对象:

使程序员能够创建对象并使用加密算法保护其 secret 性。

给定任何 Serializable 对象,可以创建一个以序列化格式(即“深拷贝”)封装原始对象的 SealedObject,并使用 DES 等加密算法密封(加密)其序列化内容,以保护其 secret 性。加密的内容稍后可以解密(使用相应的算法使用正确的解密 key )和反序列化,产生原始对象。

请注意,在应用于 SealedObject 之前,必须使用正确的算法、 key 、填充方案等完全初始化 Cipher 对象。

密码输入流:

由 InputStream 和 Cipher 组成,因此 read() 方法返回从底层 InputStream 读入但已由 Cipher 额外处理的数据。 Cipher 在被 CipherInputStream 使用之前必须完全初始化。例如,如果 Cipher 被初始化用于解密,CipherInputStream 将尝试读入数据并在返回解密数据之前对其进行解密。此类严格遵守语义,特别是其祖先类 java.io.FilterInputStream 和 java.io.InputStream 的失败语义。此类具有在其祖先类中指定的那些方法,并覆盖了所有这些方法。此外,此类捕获其祖先类未抛出的所有异常。特别是skip方法会跳过,available方法只统计已经被封装的Cipher处理过的数据。使用这个类的程序员不要使用这个类中没有定义或者重写的方法(比如a新方法或构造函数,后来添加到父类(super class)之一),因为这些方法的设计和实现不太可能考虑对 CipherInputStream 的安全影响。

CipherOutPutStream:

CipherOutputStream 由一个 OutputStream 和一个 Cipher 组成,因此 write() 方法在将数据写出到底层 OutputStream 之前首先处理数据。密码在被 CipherOutputStream 使用之前必须完全初始化。例如,如果密码被初始化用于加密,CipherOutputStream 将在写出加密数据之前尝试加密数据。此类严格遵守语义,尤其是失败语义, 其祖先类 java.io.OutputStream 和 java.io.FilterOutputStream。此类具有在其祖先类中指定的那些方法,并覆盖了所有这些方法。此外,此类会捕获其祖先类未抛出的所有异常。使用此类的程序员不要使用未在此类中定义或重写的方法(例如后来添加的新方法或构造函数),这一点至关重要父类(super class)之一),因为这些方法的设计和实现不太可能考虑对 CipherOutputStream 的安全影响。

您应该已经阅读了 Oracle 文档。

关于java - SealedObject 与 Stream Cypher,优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21829279/

24 4 0