2014-10-30 44 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