如果无法使用SecureRandom,可以回退随机吗?

时间:2016-07-05 20:02:50

标签: java random exception-handling

我有一个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类。
我的问题是:这样安全吗?如果没有,我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

如果你不受RNG算法的约束(例如你在游戏中模拟骰子,并且你想使用比Random更好的东西),你可以返回new SecureRandom()来实现默认的随机数算法适用于您的Java VM。在这种情况下,您不关心实施细节,但保证生成器加密强

请注意,某些用途确实需要特定的算法。例如,在生成AES-256加密密钥时,RNG必须提供至少256位的熵,SHA1PRNG不会。

答案 1 :(得分:0)

根据答案中的评论,它似乎不安全。最好的方法是通过抛出NoSuchAlgorithmException 以灾难性方式失败