【问题标题】:Perform casting from string to key执行从字符串到键的转换
【发布时间】:2014-10-30 11:27:10
【问题描述】:

我已经创建了一个密钥并且需要将它存储在数据库中,所以我将它转换为字符串,之后我想从数据库中取回这些密钥,那么有什么方法可以找到它?

KeyGenerator keyGenerator = KeyGenerator.getInstance("RC4");
SecretKey secretKey = keyGenerator.generateKey();
Cipher cipher = Cipher.getInstance("RC4");  
String mainKey=secretKey.toString();
String cipherkey=cipher.toString());

【问题讨论】:

  • 你可以存储它而不转换为字符串
  • 你不应该以字符串格式保存你,它也不安全。
  • MyDog 如何在不使用数据类型的情况下保存?如果我保存而不转换列的数据类型

标签: java mysql eclipse encryption cryptography


【解决方案1】:

将密钥转换为字节后存储并在数据库中使用 BLOB 数据类型

  SecretKey secretKey = keyGenerator.generateKey();
    byte[] secretKeyBytes=secretKey.getEncoded();

再次将其转换为密钥使用此

SecretKey secretKey= new SecretKeySpec(secretKeyBytes, 0, secretKeyBytes.length, "RC4");

【讨论】:

    【解决方案2】:

    您转换为字符串几乎肯定是错误的。没有标准键类会覆盖 toString(),因此您的输出不会是键数据。

    要将您的密钥转换为字符串,请使用getEncoded() 获取密钥字节,然后决定将这些字节表示为文本的方法。一个常见的选择可能是对它们进行十六进制编码(参见DatatypeConverter 类)。

    要从字符串恢复,首先将其转换回字节数组(例如十六进制解码)。然后,您可以使用以下命令重新创建您的密钥:

    SecretKey secretKey = new SecretKeySpec(keyBytes, "RC4");
    

    不要像在示例代码中那样尝试存储Cipher 对象。这毫无意义。

    【讨论】:

    • 亲爱的邓肯请发给我RC4加解密的有效代码
    • @LokeshKumar 对不起,我不是免费的编码服务。我已尝试按照您最初提出的问题回答您的问题。如果您使用 Google 搜索,您会发现很多示例。
    【解决方案3】:

    使用以下,这可用于 KeyGenerator 类:

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

    byte[] key  = aesKey.getEncoded();
    

    乐于助人。

    【讨论】:

    • 嗨 Lokesh,如果答案有用,请使用向上箭头投票,否则如果您的问题尚未解决,请告诉我问题。
    猜你喜欢
    • 2014-09-26
    • 2021-08-07
    • 1970-01-01
    • 2014-03-29
    • 2013-01-27
    • 2018-12-05
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多