Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用字符串生成公钥和私钥_Java_Cryptography_Sha_Key Pair_Cryptographic Hash Function - Fatal编程技术网

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);

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

我不是说安全性,我是说“我能用这个字符串生成相同的公钥和私钥吗?”

我该怎么做

我在研究这些方法:

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明确表示,它们不是为了安全,我认为如果没有人故意尝试攻击它,就不可能发生哈希冲突。