【发布时间】:2012-04-16 01:54:01
【问题描述】:
我正在尝试在 Android 上使用 Java 确定性地生成 RSA 密钥对。我的要求是我无法存储密钥对,并且必须在运行时生成它以等效于任何以前/未来的运行。
我的过程是,我会确定地播种一个随机数生成器并将该生成器传递给创建密钥。我的代码是:
SecureRandom random=SecureRandom.getInstance("SHA1PRNG");
random.setSeed(1234); //something device specific will be used to set this
KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024, random);
KeyPair pair=keyGen.generateKeyPair();
PublicKey pub=pair.getPublic();
PrivateKey priv=pair.getPrivate();
生成的密钥因运行而异。但是,SecureRandom 数字在每次运行时都是相同的,甚至在不同设备之间也是相同的。
我错过了什么?我怎样才能重复生成这些密钥?
谢谢
【问题讨论】:
-
为什么要这样做?当然,如果您不想存储 RSA 密钥对,那么您也不想存储用于生成 RSA 对的随机种子?奇怪的是,这段代码并没有按照你的意愿去做,但在我看来,你可能会在没有经过深思熟虑的情况下这样做