从明文生成密钥?

时间:2017-02-17 01:40:47

标签: java encryption cryptography

我需要从纯文本和任何参数(系统时间或盐)生成随机密钥。 这在Java中是否可行,我应该考虑使用哪种类/方法组合?

1 个答案:

答案 0 :(得分:0)

您可以查看javax.crypto包中的类,例如

javax.crypto.Cipher;
javax.crypto.KeyGenerator;
javax.crypto.SecretKey;

这是一个例子:

public static String generateSymmetricKey() {

    KeyGenerator keyGenerator;
    try {
        keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);
        SecretKey key = keyGenerator.generateKey();

        Cipher encodeCipher = Cipher.getInstance("AES/CTR/NoPadding");
        encodeCipher.init(Cipher.ENCRYPT_MODE, key);

        String bigSecret = Base64.getEncoder().encodeToString(
                key.getEncoded());

        return bigSecret;

    } catch (Exception e) {
        System.err.println("Secret Key generation failed: "
                + e.getMessage());
        throw new RuntimeException(e);
    }

}

因此,您将获得Base64编码,根据“AES / CTR / NoPadding”规范对称密钥进行加密。

然后有一个问题 - 你真的需要一个随机的密钥来自“纯文本”,盐,时间戳吗? 或者您是否需要使用密钥和盐来加密“纯文本”?

随机键的“纯文本”的目的是什么?

通常有一条路径:

  1. 您有一个值和一个键
  2. 您使用密钥加密您的值
  3. 为了保守你的密钥,你需要对它自己进行加密并将其存储在某个地方。只要key是一个字节数组,最好将它编码为String以便于存储在某个地方。
  4. 当您需要解密某个值时 - 恢复密钥然后使用它来解密您的值。