使用字符串生成公钥和私钥

CQM*_*CQM 5 java cryptography sha cryptographic-hash-function key-pair

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

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

我该怎么做呢?

我正在研究这些方法:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
Run Code Online (Sandbox Code Playgroud)

但我想用我自己的字符串作为密钥对生成器的种子,理想情况下该字符串将通过这些算法进行哈希处理。KeyGen 仅获取SecureRandom对象。每当我传递该字符串时,我都想要相同的结果密钥对。

Cha*_*cer 5

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

random.setSeed(myString.hasCode())

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

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

MessageDigest md = MessageDigest.getInstance("SHA-256");
random.setSeed(md.digest(myString.getBytes())
Run Code Online (Sandbox Code Playgroud)

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

  • “找到具有相同哈希码的两个字符串被认为是不可行的”——这仅适用于加密哈希函数,而 Java 的“String.hashCode”方法则不然。也不能保证“hashCode”在程序的不同运行中为同一字符串返回相同的值;它只需要在一次执行中保持一致。与 Java 哈希码相比,像 SHA-256 这样的加密哈希函数是更好的选择。 (3认同)