Java 使用字符串生成公钥和私钥
在Java中,我希望根据我的应用程序中的字符串生成公钥和私钥 我不是说安全性,我是说“我能用这个字符串生成相同的公钥和私钥吗?” 我该怎么做 我在研究这些方法:Java 使用字符串生成公钥和私钥,java,cryptography,sha,key-pair,cryptographic-hash-function,Java,Cryptography,Sha,Key Pair,Cryptographic Hash Function,在Java中,我希望根据我的应用程序中的字符串生成公钥和私钥 我不是说安全性,我是说“我能用这个字符串生成相同的公钥和私钥吗?” 我该怎么做 我在研究这些方法: KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); keyGen.initialize(1024, random);
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.initialize(1024, random);
但是我想用我自己的字符串为密钥对生成器种子,理想情况下,这些字符串将通过这些算法进行散列。KeyGen只接受
SecureRandom
对象。每当我传递该字符串时,我都需要相同的结果密钥对。在初始化random
后尝试添加以下行:
random.setSeed(myString.hasCode())
在程序的一次执行过程中,给定相同的字符串,字符串的哈希代码值将始终相同,并且不太可能找到具有相同哈希代码的两个字符串
如果要生成一个在程序多次执行期间保证相同的哈希值,或者如果要确保查找两个生成相同哈希值的字符串确实不可行,请尝试使用类似的方法,而不是使用String.hashCode()
。像这样:
MessageDigest md = MessageDigest.getInstance("SHA-256");
random.setSeed(md.digest(myString.getBytes())
另外,请注意,字符串每次必须始终具有相同的字符编码,以便生成相同的
MessageDigest
值以及公钥和私钥对。“认为不可能找到具有相同哈希代码的两个字符串”-这仅适用于加密哈希函数,哪个Java的String.hashCode
方法不是。也不能保证hashCode
会在程序的不同运行中为相同的字符串返回相同的值;它只需要在一次执行中保持一致。在这里,像SHA-256这样的加密哈希函数比Java哈希代码要好得多。谢谢!我编辑了我的答案,以解决您的评论和影响哈希的字符编码问题。我甚至不会说,找到与Java的hashCode
方法的哈希冲突“非常不可能”。阅读:由于hashCode
生成一个32位的结果,您只需要大约77000个(随机)字符串就有50%的几率其中两个将具有相同的hashCode。而用于实现hashCode
的算法并不是为了抵抗而设计的,因此有人故意用所选的hashCode生成字符串并不困难。好吧,OP明确表示,它们不是为了安全,我认为如果没有人故意尝试攻击它,就不可能发生哈希冲突。