无论如何我可以生成始终相同的私钥吗?我厌倦了初始化 KeyPairGenerator用RandomSecure使用相同 seed
的对象:
private PrivateKey getPrivateKey(String seed) {
try {
SecureRandom sr = new SecureRandom(seed.getBytes());
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024, sr);
KeyPair keyPair = keyGen.generateKeyPair();
return keyPair.getPrivate();
} catch (NoSuchAlgorithmException e) {
System.out.println("Failed to generate key pair!");
}
return null;
}
我调用上面的函数并检查私钥是否相同:
String seed = "xyzabc123";
PrivateKey key1 = getPrivateKey(seed);
PrivateKey key2 = getPrivateKey(seed);
boolean same = key1.equals(key2); // false
它们是不同的,我的问题是有没有办法生成始终相同的私钥?
最佳答案
我认为这段代码不会在每次请求时生成相同的private-key
。
这背后的原因是这段特殊的代码
SecureRandom sr = new SecureRandom(seed.getBytes());
每次调用 getPrivateKey(String)
方法时。每一次 SecureRandom
类都会生成一个新的随机数。
keyGen.initialize(1024, sr); //each time secure random number will be different.
KeyPair keyPair = keyGen.generateKeyPair();
和keyGen.initialize()
方法总是用不同的key初始化,所以每次keyGen.generateKeyPair();
方法都会生成不同的private -key
.
如果您尝试在 initialize()
方法中更改或传递相同的 SecureRandom
对象,则只有可能实现。
关于java - 使用随机安全生成 key 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36791447/