2010-12-09 48 views
1

我目前正在評估處理高度敏感的個人信息的項目,因此需要對其進行加密。我們正在談論幾百兆字節的多媒體文件,如MP3或其他。該應用程序肯定會以JavaFX作爲GUI /前端在Java中實現。現在我正在尋找一種可行的解決方案來保護這些數據免受無意/故意濫用。數據需要以某種方式加密。用戶需要在使用該軟件之前提供登錄憑證,因此使用密碼來解鎖用於對稱加密的密鑰是可能的。該應用程序的用戶將是非專業人士,因此像TrueCrypt或類似的解決方案不會做的伎倆。雖然某種透明解決方案是最好的。那麼對於這個問題有沒有(半)標準解決方案?使用Java加密敏感應用程序數據

感謝您的幫助

問候,

安德烈亞斯

+0

你嘗試考慮看看JCE運行(Java加密擴展) ? http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.html和http://download.oracle.com/javase/1.4.2/docs/guide/security/jce/ JCERefGuide.html – Pushkar 2010-12-13 15:05:56

+0

其實這是一個很好的提示,但我更多地尋找某種即可使用的庫,它爲我提供了一切。但是密碼{輸入,輸出}流類看起來不錯,創建某種包裝來爲某些文件提供透明加密應該是個問題。 – 2010-12-13 21:27:38

回答

2

以下方法加密給定的字節數組,其中keyC是加密密鑰。 initalVector是用於加密的初始向量。 此矢量通常用於計數器(CTR)模式下的AES加密,但對於其他模式不是必需的。它是一個16字節的數組,用於加密和解密。

private byte[] encryptAES128(byte[] input, byte[] initialVector) { 
    SecretKey aeskey = new SecretKeySpec(keyC, 0, 16, "AES"); 
    AlgorithmParameterSpec paramSpec = new IvParameterSpec(initialVector); 
    cipher = Cipher.getInstance("AES/CTR/NOPADDING"); 
    getAesCTRCipher().init(Cipher.ENCRYPT_MODE, aeskey, paramSpec); 
    return getAesCTRCipher().doFinal(input); 
} 

該方法返回一個新的字節數組,作爲加密的輸入數組。 它總是以16個字節的塊爲單位工作。 對於較大的文件,您需要在字節上運行for循環並連接結果:)

祝您好運!

編輯: 加密的16個字節的塊後,你需要增加初始向量,即如果加密在計數器模式:)

-3

使用公共密鑰加密算法,如RSA。強大,幾乎不可破解,易於使用和理解。甚至有可能是Java中的RSA或類似加密的方法甚至是類。

+1

不是一個真正的答案,也不是真正的正確。 – 2010-12-09 23:32:31

相關問題