SealedObject vs Stream Cypher,优点和缺点

时间:2014-02-17 12:35:01

标签: java android encryption

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

a)使用SealedObject并使用普通FileOutputStreamFileInputStream

保存并加载

b)使用CipherOutputStreamCipherInputStream

保存序列化对象

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

1 个答案:

答案 0 :(得分:-2)

SealedObject:

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

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

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

CipherInputStream:

由InputStream和Cipher组成,因此read()方法返回从底层InputStream读入但已由Cipher另外处理的数据。 Cipher必须在被CipherInputStream使用之前完全初始化。例如,如果Cipher被初始化用于解密,则CipherInputStream将在返回解密数据之前尝试读取数据并解密它们。此类严格遵守语义,尤其是失败语义,它的祖先类java.io.FilterInputStream和java.io.InputStream。该类具有其祖先类中指定的那些方法,并将它们全部覆盖。此外,此类捕获其祖先类未抛出的所有异常。特别是,skip方法跳过,并且可用方法仅计算已封装的Cipher处理过的数据。对于使用此类的程序员不要使用此类中未定义或覆盖的方法(例如之后添加到其中一个超类的新方法或构造函数),因为这些方法的设计和实现不太可能考虑到CipherInputStream的安全性影响。

CipherOutPutStream:

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

您应该已阅读Oracle文档。

相关问题