在Java中,我想基于我的应用程序中的字符串生成公钥和私钥。
我不是为了安全,我正在寻找"我可以使用此字符串生成相同的公钥和私钥"。
我该怎么做?
我正在研究这些方法:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
但是我想用自己的字符串为密钥对生成器播种,理想情况下,这些算法会对这些字符串进行哈希处理。 KeyGen只接受SecureRandom
对象。无论何时我传递该字符串,我都想要相同的结果密钥对。
答案 0 :(得分:4)
初始化random
后尝试添加以下行:
random.setSeed(myString.hasCode())
在一次执行程序期间,给定相同的字符串,字符串的哈希码值将始终相同,并且认为不太可能找到具有相同哈希码的两个字符串。
如果你想生成一个在程序的多次执行期间保证相同的哈希,或者如果你想确定找到两个生成的字符串是真的不可行的话相同的哈希值,尝试使用MessageDigest而不是String.hashCode()
之类的内容。像这样:
MessageDigest md = MessageDigest.getInstance("SHA-256");
random.setSeed(md.digest(myString.getBytes())
另请注意,String每次必须始终具有相同的字符编码,以便您生成相同的MessageDigest
值以及公钥和私钥对。