我正在开发Java密码学应用程序。 我想使用诸如AES或DES之类的对称算法对文件进行加密,并将secretKey存储在数据库中,以便将来对该文件进行解密。 我想知道如何将SecretKey对象存储在数据库表中。 我应该序列化密钥对象吗? (secretKey是可序列化的。)如何在数据库中存储序列化的对象? 我应该使用哪种MYSQL数据类型?

另一种解决方案是获取密钥的原始byte [],将其转换为base64并存储在数据库中。 稍后,我可以将base64密钥解码为原始的Raw密钥,但是问题在于将原始密钥转换为SecretKey对象。

任何帮助将不胜感激。

您需要使用blob来存储对象,并且在存储在DB中之前必须对对象进行序列化。 请参阅此以获取更多信息。 stackoverflow.com/questions/2747203/

密钥的数据类型将是什么

使用字符串对象存储密钥。

请向我发送有关mysql数据库中更新密钥的代码以及如何使用它

您可能做错了。 如果这是长期存储,则可能应该使用PKI而不是对称加密。

嗨,EJP,我想在不同时间使用对称加密算法进行加密和解密,所以在这两种情况下我该如何保存秘密密钥?

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

乐意效劳。

嗨,洛克(Lokesh),如果答案有用,请使用向上箭头将其投票,否则,如果您的问题尚未解决,请告诉我该问题。