一、Random
Insecure Randomness这个问题就是原来公司老代码使用random遇到的问题,因为这个类提供的获取随机数的方法是可预测的,random是用来创建伪随机数
。所谓伪随机数,是指只要给定一个初始种子产生的随机数列是完全一样的
基本算法:linear congruential pseudorandom number generator (LGC)
先行同余法为随机数生成器在注重信息安全的应用中,不要使用 LCG 算法生成随机数,要使用SecureRandom。但是唯一好的一点就是不需要处理异常和抛异常
二、SecureRandom
所以我写了一个工具类用来提供这个方法可以让其地方调这个方法而且不用处理异常
public class SecureRandomUtil {
//生成日志类
private static Logger logger = LoggerFactory.getLogger(SecureRandomUtil.class);
public static int getSecureRandom(int size) {
SecureRandom sr = null;
try {
sr = SecureRandom.getInstanceStrong(); // 获取高强度安全随机数生成器
} catch (NoSuchAlgorithmException e) {
logger.error(e.getMessage(), e);
sr = new SecureRandom(); // 获取普通的安全随机数生成器
}
//限制获取出来的随机数最大值
int i = sr.nextInt(size);
return i;
}