生成随时间变化的密钥

时间:2012-03-23 21:27:19

标签: java cryptography

我正在尝试generate a key并且重要的是每次运行类时,键都完全相同。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

如链接中所述,密钥由加密算法(RSA,DSA)生成。 Java附带several different algorithmsKeyFactory可以使用它来生成密钥。我很想你多次重建相同的密钥。通常,您只需创建一次密钥,然后存储其编码的表单。您可以在将来从编码表单重新创建密钥。


编辑: 我现在更了解你的问题。我以为你想要一个用于公共/私人加密的密钥对。为了保存游戏,对称密钥就足够了。请注意,这个“足够好”的示例需要很多快捷方式。 如果代码在客户端上执行,任何对称密钥算法都可以被破解,这也就是没有什么不同。但是对于游戏来说,这将阻止99.9%的用户解密保存状态。

// I use String.getBytes() as a convenince a lot.  I specify the encoding
// to ensure that the result is consistent.
final String utf8 = "utf-8";

String password = "It's a secret!  Make sure it's long enough (24 bytes)";
byte[] keyBytes = Arrays.copyOf(password.getBytes(utf8), 24);
SecretKey key = new SecretKeySpec(keyBytes, "DESede");

// Your vector must be 8 bytes long
String vector = "ABCD1234";
IvParameterSpec iv = new IvParameterSpec(vector.getBytes(utf8));

// Make an encrypter
Cipher encrypt = Cipher.getInstance("DESede/CBC/PKCS5Padding");
encrypt.init(Cipher.ENCRYPT_MODE, key, iv);

// Make a decrypter
Cipher decrypt = Cipher.getInstance("DESede/CBC/PKCS5Padding");
decrypt.init(Cipher.DECRYPT_MODE, key, iv);

// Example use
String message = "message";
byte[] messageBytes = message.getBytes(utf8);
byte[] encryptedByted = encrypt.doFinal(messageBytes);
byte[] decryptedBytes = decrypt.doFinal(encryptedByted);

// You can re-run the exmaple to see taht the encrypted bytes are consistent
System.out.println(new String(messageBytes, utf8));
System.out.println(new String(encryptedByted, utf8));
System.out.println(new String(decryptedBytes, utf8));