默认random的随机数生成方案经官方测试是不够随机的,并有安全暴力猜测的安全风险,对于安全较高,并且吞吐量要求较低的一般性金融类系统,推荐使用。实现源码如下:
默认是SHA1的算法,我换成了稍稍优化的非阻塞算法PRNG,这也是官方推荐的
SHA-1应该是不安全的,贴一篇博文有兴趣的可以看一下
https://www.cnblogs.com/merlindu/p/6545588.html
工具线程安全,内部加锁,有兴趣的同学可以使用原子引用优化阻塞锁,以及相关内存等,这里主要关注安全
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import java.security.SecureRandom;
/**
* @date 19-4-25
* @auther jackliang
* @description TODO
*/
@Slf4j
public class SecurityRandomUtils {
private static SecureRandom secureInstance = null;
private static final int WIND_POS = (2 << 9) >> 3;
private static final int NUMBER_BYTES = 10;
private static final String SHA_TAGS = "NativePRNG