我有一个Java库,它有一个类(ShrubSecureRandom),它使用SecureRandom生成数字,句子等。
它用于获取Random类的方法如下:
public Random getSRGInstance() {
Random instanceToReturn;
try {
instanceToReturn = SecureRandom.getInstance("SHA1PRNG");
} catch (Exception e) {
System.out.println("SecureRandom algorithm not found! Reverting to INSECURE Random instance...");
instanceToReturn = new Random();
}
return instanceToReturn;
}
如果代码在创建SecureRandom类时遇到异常(NoSuchAlgorithmException等),它将使用Random类。
我的问题是:这样安全吗?如果没有,我该怎么做呢?
答案 0 :(得分:1)
如果你不受RNG算法的约束(例如你在游戏中模拟骰子,并且你想使用比Random更好的东西),你可以返回new SecureRandom()
来实现默认的随机数算法适用于您的Java VM。在这种情况下,您不关心实施细节,但保证生成器加密强。
请注意,某些用途确实需要特定的算法。例如,在生成AES-256加密密钥时,RNG必须提供至少256位的熵,SHA1PRNG不会。
答案 1 :(得分:0)
根据答案中的评论,它似乎不安全。最好的方法是通过抛出NoSuchAlgorithmException
以灾难性方式失败。