我需要从纯文本和任何参数(系统时间或盐)生成随机密钥。 这在Java中是否可行,我应该考虑使用哪种类/方法组合?
答案 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”规范对称密钥进行加密。
然后有一个问题 - 你真的需要一个随机的密钥来自“纯文本”,盐,时间戳吗? 或者您是否需要使用密钥和盐来加密“纯文本”?
随机键的“纯文本”的目的是什么?
通常有一条路径: