【问题标题】:How to manage secret Key in java如何在java中管理密钥
【发布时间】:2018-10-13 16:38:45
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 您需要使用blob来存储对象,并且对象必须在存储到数据库之前进行序列化。有关更多信息,请参阅此。 stackoverflow.com/questions/2747203/…
  • 密钥的数据类型是什么
  • 使用字符串对象存储密钥。
  • 请发给我更新mysql数据库秘钥的代码及使用方法
  • 你可能做错了。如果这是长期存储,您可能应该使用 PKI 而不是对称加密。

标签: java mysql encryption cryptography encryption-symmetric


【解决方案1】:

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,如果答案有用,请使用向上箭头投票,否则如果您的问题尚未解决,请告诉我问题。
猜你喜欢
  • 1970-01-01
  • 2019-01-21
  • 2020-03-23
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多