我有2個方式來加密和解密的Java對象:SealedObject VS流Cypher支架,利弊
a)使用SealedObject
和保存,並與正常FileOutputStream
和FileInputStream
b負載此)保存的序列化對象使用CipherOutputStream
和CipherInputStream
這兩個選擇之間在性能和/或安全性方面是否存在差異?
我有2個方式來加密和解密的Java對象:SealedObject VS流Cypher支架,利弊
a)使用SealedObject
和保存,並與正常FileOutputStream
和FileInputStream
b負載此)保存的序列化對象使用CipherOutputStream
和CipherInputStream
這兩個選擇之間在性能和/或安全性方面是否存在差異?
SealedObject:
使程序員能夠創建對象並保護其機密性與加密算法。
給定任何Serializable對象,可以使用加密算法(例如DES)創建一個封裝原始對象的序列化對象的SealedObject,以序列化格式(即「深層拷貝」)封裝(加密)其序列化內容,保護其機密性。稍後可以對加密的內容進行解密(使用正確的解密密鑰的相應算法)並對其進行解序列化,產生原始對象。
注意,密碼對象必須使用正確的算法,密鑰,填充方案等進行完全初始化,被應用於SealedObject之前。這樣read()方法返回從基礎InputStream讀入但已經由該Cipher另外處理過的數據
CipherInputStream:
由一個InputStream和一個Cipher的。該密碼必須使用由CipherInputStream.For例如之前被完全初始化,如果密碼被初始化爲解密,在CipherInputStream將嘗試讀入數據並將其解密,返回解密data.This課前嚴格遵守此語義,尤其是失效的意義,其祖先類java.io.FilterInputStream中和的java.io.InputStream的。該類完全具有在其祖先類中指定的方法,並覆蓋它們全部。而且,這個類捕獲所有祖先類不拋出的異常。特別地,該方法跳過跳過,以及可用的方法只計算已經由封裝Cipher.It處理的數據是用於使用此類不使用未在該類中定義或重寫的方法(例如,一個程序員關鍵後來加入到超類之一),因爲這些方法的設計和實現是不可能的新方法或構造已經考慮到對CipherInputStream的安全影響。
CipherOutPutStream:
CipherOutputStream被寫出到底層OutputStream之前的數據組成一個OutputStream和一個Cipher這樣write()方法第一工藝的。密碼必須在被CipherOutputStream使用之前完全初始化。例如,如果密碼初始化爲加密,則CipherOutputStream將在寫出加密數據之前嘗試加密數據。該類嚴格遵守語義,尤其是故障語義,它的祖先類java.io.OutputStream和java.io.FilterOutputStream。該類完全具有在其祖先類中指定的方法,並覆蓋它們全部。而且,這個類捕獲所有的祖先類沒有拋出的異常。使用這個類的程序員不要使用在這個類中沒有定義或重寫的方法(例如後來添加的新方法或構造函數對超類之一),因爲這些方法的設計和實施是不太可能考慮到對CipherOutputStream的安全影響。
您應該閱讀Oracle文檔。
我已閱讀Oracle文檔,但我的問題不是什麼是SealedObject和CipherStreams,而是*在性能方面存在差異?* – AndreaF
如果您需要進一步深入的知識,那麼一切都會提到使用'JavaDoc'他們會給你更詳細和JVM運行時環境知識,即他們如何操縱東西到對象和.obj文件。對不起,如果我傷害了你。 –
@NaveedYousaf他問兩種方法的區別和安全性,現在關於他們的功能和你的JavaDoc副本在這裏是完全不可接受的 –