如何管理java中的密钥

Lok*_*mar 6 java mysql encryption cryptography encryption-symmetric

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

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

任何帮助将受到高度赞赏.

Bha*_*anu 5

java中有一个类 - 'Key Generator' - 这个类提供了secret(对称)密钥生成器的功能.

您基本上需要使用此类进行密钥生成,具体方式如下:

SecretKey  aesKey  = KeyGenerator.getInstance("AES").generateKey();
Run Code Online (Sandbox Code Playgroud)

这将生成具有算法默认长度的密钥,该密钥作为参数传递,在此示例中,它将生成128位的密钥(AES的默认密钥).

或使用以下功能:

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

您可以将这些生成的密钥转换为字符数组,字节数组或字符串,然后将这些密钥存储在任何数据库中,使用以下命令:

char[] key  = encodeHex(aesKey.getEncoded());
Run Code Online (Sandbox Code Playgroud)

要么

byte[] key = aesKey.getEncoded();
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅KeyGenerator类:http://docs.oracle.com/javase/7/docs/api/javax/crypto/KeyGenerator.html

乐于帮助.