Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 SecureRandom setSeed方法在MacOS上失败_Java_Macos_Secure Random - Fatal编程技术网

Java SecureRandom setSeed方法在MacOS上失败

Java SecureRandom setSeed方法在MacOS上失败,java,macos,secure-random,Java,Macos,Secure Random,运行macOS High Sierra 10.13.5和Java 1.8.0u171 我有如下代码: SecureRandom random = SecureRandom.getInstance("NativePRNGNonBlocking"); random.setSeed(bla byte array); 无论何时运行,我都会遇到以下异常,我已编辑了一些包含一些敏感位的堆栈跟踪: java.security.ProviderException: setSeed() failed a

运行macOS High Sierra 10.13.5和Java 1.8.0u171

我有如下代码:

SecureRandom random = SecureRandom.getInstance("NativePRNGNonBlocking");
random.setSeed(bla byte array);
无论何时运行,我都会遇到以下异常,我已编辑了一些包含一些敏感位的堆栈跟踪:

java.security.ProviderException: setSeed() failed
    at sun.security.provider.NativePRNG$RandomIO.implSetSeed(NativePRNG.java:472)
    at sun.security.provider.NativePRNG$RandomIO.access$300(NativePRNG.java:331)
    at sun.security.provider.NativePRNG$NonBlocking.engineSetSeed(NativePRNG.java:312)
    at java.security.SecureRandom.setSeed(SecureRandom.java:427)
--redacted--
Caused by: java.io.IOException: Operation not permitted
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:313)
    at sun.security.provider.NativePRNG$RandomIO.implSetSeed(NativePRNG.java:470)
    at sun.security.provider.NativePRNG$RandomIO.access$300(NativePRNG.java:331)
    at sun.security.provider.NativePRNG$NonBlocking.engineSetSeed(NativePRNG.java:312)
    at java.security.SecureRandom.setSeed(SecureRandom.java:427)
--redacted--
它似乎在试图写点什么,但我不知道是什么,也不知道在哪里。该区域中有提到/dev/random的代码,所以我想我应该检查一下它的烫发,但我也不知道该怎么做

x@y:~ $ ls -ld /dev/null
crw-rw-rw-  1 root  wheel    3,   2 Jun 11 15:25 /dev/null
x@y:~ $ ls -ld /dev/urandom
crw-rw-rw-  1 root  wheel   14,   1 Jun 11 15:02 /dev/urandom
x@y:~ $ ls -ld /dev/random
crw-rw-rw-  1 root  wheel   14,   0 Jun  7 08:15 /dev/random
你知道问题是什么吗?我能做些什么来补救


编辑:我发现,
NativePRNGNonBlocking
似乎试图访问OSX显然不允许写入的
/dev/uradom
。是否有一种方法可以启用写入,或者另一种方法可以避免这种情况,同时仍然保持非阻塞行为?

标准种子应该已经提供了足够的熵

另见:

如果您仍然喜欢自己的种子,很抱歉,我无法提供如何向OSX/dev/uradom写入的答案

出于安全目的,/dev/urandom不是最佳选择,/dev/random或SecureRandom的默认种子可能是更好的解决方案

编辑:有些人认为/dev/uradom也不错:
标准种子应该已经提供足够的熵

另见:

如果您仍然喜欢自己的种子,很抱歉,我无法提供如何向OSX/dev/uradom写入的答案

出于安全目的,/dev/urandom不是最佳选择,/dev/random或SecureRandom的默认种子可能是更好的解决方案

编辑:有些人认为/dev/uradom也不错:

我可以在Oracle JDK 1.8.0-152上重现这个问题,但这个问题似乎在Oracle JDK 1.8.0-202中得到了修复


另请参见

我可以在Oracle JDK 1.8.0-152上重现该问题,但该问题似乎在Oracle JDK 1.8.0-202中得到了修复


另请参见

如果使用
SecureRandom.getInstance(“SHA1PRNG”、“SUN”)
,您是否仍然看到问题?假设MacOS只用于非关键性的开发工作。我似乎没有遇到任何问题。作为补救步骤,我修改了代码,如果os.name包含“macos”,则将其设置为该算法。考虑到我们的linux系统仍将使用NativePRNGNonBlocking,这是一个不太理想的解决方案。在开发环境和生产环境上进行区分可能更好。因为我不确定
os.name
是否足够可靠。如果它被黑客攻击怎么办?是的,这可能是我将采取的方法,现在我知道罪魁祸首是什么了。我不知道如何启用对Uradom的写访问,因此更好的方法是在那里添加一个环境检查(我们已经有了环境),以选择算法,而不是要求Mac上的每个人添加对Uradom的写访问(假设可能)。感谢您提供的信息。或者使用容器。如果使用
SecureRandom.getInstance(“SHA1PRNG”、“SUN”)
,您是否仍然看到问题?假设MacOS只用于非关键性的开发工作。我似乎没有遇到任何问题。作为补救步骤,我修改了代码,如果os.name包含“macos”,则将其设置为该算法。考虑到我们的linux系统仍将使用NativePRNGNonBlocking,这是一个不太理想的解决方案。在开发环境和生产环境上进行区分可能更好。因为我不确定
os.name
是否足够可靠。如果它被黑客攻击怎么办?是的,这可能是我将采取的方法,现在我知道罪魁祸首是什么了。我不知道如何启用对Uradom的写访问,因此更好的方法是在那里添加一个环境检查(我们已经有了环境),以选择算法,而不是要求Mac上的每个人添加对Uradom的写访问(假设可能)。谢谢你的信息。或者使用容器。我认为在Mac OS上,
/dev/urandom
/dev/random
都连接到同一个PRNG。我认为在Mac OS上,
/dev/urandom
/dev/random
都连接到同一个PRNG。