java - Java 的 SecureRandom 如何知道系统上可用的 NativePRNG 的哪个实现?

标签 java cryptography jvm

使用java.security.SecureRandom

SecureRandom random = new SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes);

将根据

http://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html

使用NativePRNG的系统实现生成随机字节。

Java 运行时如何知道该实现在系统上的位置?在 GNU/Linux 上通常是/dev/random 但在 Windows 上情况并非如此。某处有配置文件吗?

谢谢

最佳答案

可以通过检查 SecureRandom.java 的源代码来收集以下信息,该源代码随 JDK 一起提供在 src.zip 中。

使用来源,卢克!

How does Java runtime know where on the system this implementation it is?

这是 JDK 的特定于平台的部分。

SecureRandom 枚举已注册的 java.security.Provider 实例,寻找提供以下类型 java.security.Provider.Service 的实例“安全随机”。 JDK 通常附带一个内部默认安全提供程序,该提供程序以特定于平台的方式实现该安全提供程序。

如果找不到,它将回退到纯 java SHA1PRNG。

关于java - Java 的 SecureRandom 如何知道系统上可用的 NativePRNG 的哪个实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28088684/

相关文章:

javascript - javascript 中的 RSA 不再支持 ASCII/字节数组

ruby - PBEWithMD5AndDES 在 Ruby 中的实现

java - linux上哪里可以找到java虚拟机日志

即使没有批量索引,Elasticsearch 1.5.2 2 个节点中的高 JVM 堆

java - Eclipse 和 HotSpot 虚拟机 : does it run/debug client or server by default?

java - 如何在 Java 中创建一个不可变的单例?

c# - 使用预先计算的签名在 C# 中创建 PKCS#7 签名消息

Java - 将ENUM1直接转换为ENUM2

java - 没有换行字符的 JSON Java

java - Mule 错误,只有所有者线程可以写入 http 模块仍然发生的消息