java编程遇到{Insecure Randomness}问题对随机数Random和SecureRandom的使用分析

文章讨论了在旧代码中使用random类可能带来的安全性问题,因为它生成的是可预测的伪随机数。推荐在需要高安全性的场景下使用SecureRandom,特别是通过getInstanceStrong()获取高强度随机数生成器。如果无法获取,文章提供了一个工具类作为备选,使用普通安全随机数生成器。工具类处理了可能出现的NoSuchAlgorithmException异常,确保方法调用的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值