4

在 Java 中,我想根据我的应用程序中的字符串生成公钥和私钥。

我不是为了安全,我是为了“我可以使用这个字符串生成相同的公钥和私钥吗”。

我该怎么做?

我正在研究这些方法:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);

但我想用我自己的字符串作为密钥对生成器的种子,理想情况下,它会被这些算法散列。KeyGen 只接受SecureRandom对象。每当我传递该字符串时,我都想要相同的结果密钥对。

4

1 回答 1

4

初始化后尝试添加以下行random

random.setSeed(myString.hasCode())

在程序的一次执行期间,给定相同的字符串,您的字符串的哈希码值将始终相同,并且认为很难找到具有相同哈希码的两个字符串。

如果您想生成一个在程序的多次执行期间保证相同的哈希,或者如果您想确保找到两个生成相同哈希的字符串确实不可行,请尝试使用MessageDigest之类的东西而不是String.hashCode(). 像这样:

MessageDigest md = MessageDigest.getInstance("SHA-256");
random.setSeed(md.digest(myString.getBytes())

另外,请注意,字符串每次必须始终具有相同的字符编码,以便您生成相同的MessageDigest值以及公钥和私钥对。

于 2015-08-05T02:50:26.613 回答