2014-10-30 70 views
5

我正在開發Java密碼應用程序。我想使用對稱算法(如AES或DES)對文件進行加密,並將secretKey存儲在數據庫中以供將來解密文件。我想知道如何將SecretKey對象存儲在數據庫表中。我應該序列化關鍵對象嗎? (secretKey是可序列化的。)如何將序列化對象存儲在數據庫中?我應該使用什麼MYSQL數據類型?如何管理java中的祕密密鑰

另一個解決方案是獲取密鑰的原始字節[],將其轉換爲base64並存儲在數據庫中。我稍後可以將base64密鑰解碼爲原始Raw密鑰,但問題在於將原始密鑰轉換爲SecretKey對象。

任何幫助將不勝感激。

+1

你需要使用'blob'用於存儲對象和對象必須在數據庫存儲之前被序列化。看到這個更多的信息。 http://stackoverflow.com/questions/2747203/want-to-store-object-in-mysql-database – Ali786 2014-10-30 08:45:07

+0

什麼將數據類型的祕密密鑰 – 2014-10-30 08:53:30

+0

使用字符串對象來存儲密鑰。 – Ali786 2014-10-30 08:58:42

回答

3

在java中有一個類 - 'Key Generator' - 這個類提供了祕密(對稱)密鑰生成器的功能。

你基本上需要使用這個類爲祕密密鑰生成,在一個方式如下:

SecretKey aesKey = KeyGenerator.getInstance("AES").generateKey(); 

這將產生與它作爲參數傳遞的算法默認長度的密鑰,在這個例子中將生成128位的密鑰(默認爲AES)。

或使用以下功能:

public static SecretKey generateSecretKey() 
{ 
    KeyGenerator keyGener = KeyGenerator.getInstance("AES"); 
    keyGener.init(256) // here you can pass any valid length 
    return keyGener.generateKey(); 
} 

您可以將這些生成的密鑰轉換爲字符數組,字節數組或字符串,然後可將它們存儲與任何數據庫,使用下列內容:

char[] key = encodeHex(aesKey.getEncoded()); 

byte[] key = aesKey.getEncoded(); 

更多細節請參閱KeyGenerator類: http://docs.oracle.com/javase/7/docs/api/javax/crypto/KeyGenerator.html

樂意幫忙。

感謝,ANKIT

+0

嗨Lokesh,如果答案是有用的,然後使用向上的箭頭來投票,否則,如果你的問題還沒有解決,那麼讓我知道這個問題。 – LearnAndHelp 2014-11-03 15:48:24