运行 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
试图访问/dev/urandom
OSX 显然不允许写入的内容。有没有办法可以写入它,或者在保持非阻塞行为的同时避免这种情况的另一种方法?