2015-02-11 46 views
1

我想用AES對Java文件進行加密,然後對其進行數字簽名並將其存儲在數據庫中,以便我可以驗證簽名,然後在獲取該文件時將其解密。我已經閱讀了Oracle的數字簽名教程,但他們最終創建了3個文件,即:數據,簽名&公鑰。我正在尋找一個解決方案,我只有一個文件。有沒有這樣的解決方案?我對密碼學並不熟悉,因此無法收集有關它的大量信息。加密和數字簽名能產生一個文件嗎?

回答

0

這取決於你的情況,但你只需要一個公鑰簽名,如果全部以下事情是真的。你想:在不同的地方你的AES加密引擎的

  1. 運行多個版本
  2. 則需要能夠驗證哪個服務器加密該文件
  3. 而在這中間攻擊防範男人檢查

這是相當罕見的情況,我建議你不真的需要公鑰簽名。

通常情況下,您只需附加一個HMAC「簽名」來驗證文件。我稱它爲簽名,因爲它是使用對稱AES加密/解密密鑰和加密文件內容生成代碼的意義上的一種簽名。這將保護文件的完整性,使其不知道加密/解密密鑰的人進行修改。

如果你使用AES加密文件,我建議使用這個免費的open source file format。在下載頁面上有一個JAVA library available

0

是的:你可以簡單地將結果文件連接成一個(使用分隔符,所以你可以再次分割)。 或者你可以把它們放到一個zip文件中並在處理之前將它們解壓縮。

哎呀錯過了數據庫部分:那裏你可以存儲信息既可以作爲ASCII編碼的VARCHAR或直接讀取生成的文件到BLOB的

2

這當然是可能的。如果你只是連接結果(可能由一個長度指示器來保持它們適用),那麼你已經合成了這樣一個單一的blob,它可以存儲在一個文件中。

這當然不是一個很好描述的結構。在密碼學中,已經有了定義這樣的結構。除了爲諸如RNCrypt之類的庫定義的許多結構之外,還有兩種衆所周知的容器格式:CMS和PGP。 CMS或加密消息語法最初針對SMIME進行了描述,並且由RSA從PKCS#7標準發展而來。 OpenPGP由PGP和GPG等應用程序使用。

對於Java,PGP和CMS功能由Bouncy Castle庫提供。