SecureRandom生成随机数-验证码

三、常见使用

1)生成6为随机验证码

SecureRandom secureRandom = SecureRandom.getInstance(“SHA1PRNG”);

String verifyCode = String.valueOf(secureRandom.nextInt(900000) + 100000);

四、各种实现及结果验证

package com.basic;

import java.security.NoSuchAlgorithmException;

import java.security.NoSuchProviderException;

import java.security.SecureRandom;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Random;

/**

  • 生成6位随机数的三种实现方式
  • @author libusi

*/

public class Test01 {

public static void main(String[] args) throws NoSuchAlgorithmException {
    demo1();
    demo2();
    demo3();
    demo4();
}
private static void demo1() {
    ArrayList<String> list = new ArrayList<>();
    for (int i = 0; i < 1000; i++) {
        int intValue = Double.valueOf(Math.random() * 1000000).intValue();
        String random = String.valueOf(intValue);
        String r = (random.length() == 6 && "9".equals(random.substring(0, 1))) ? random : String.valueOf(intValue + 100000);
        list.add(r);
    }
    Collections.sort(list);
    list.forEach(System.out::println);
}
private static void demo2() {
    ArrayList<Integer> list = new ArrayList<>();
    for (int i = 0; i < 10000; i++) {
        Random random1 = new Random();
        list.add(random1.nextInt(900000) + 100000);
    }
    Collections.sort(list);
    list.forEach(System.out::println);
}
private static void demo3() throws NoSuchAlgorithmException {
    ArrayList<String> list = new ArrayList<>();
    for (int i = 0; i < 1000000; i++) {
        SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
        String v = String.valueOf(secureRandom.nextInt(900000) + 100000);
        list.add(v);
    }
    Collections.sort(list);
    list.forEach(System.out::println);
}
private static void demo4() throws NoSuchAlgorithmException {
    //验证SecureRandom
    ArrayList<Integer> list = new ArrayList<>();
    for (int i = 0; i < 10000; i++) {
        SecureRandom random3 = SecureRandom.getInstance("SHA1PRNG");
        //生成10位数的随机数
        Integer r = random3.nextInt();
        //生成0~99的随机数
        Integer r2 = random3.nextInt(100);
        list.add(r2);
    }
    Collections.sort(list);
    list.forEach(System.out::println);
}

}

五、常见及相关问题总结

1)SecureRandom.getInstance(“SHA1PRNG”)初始化慢

Linux环境,在项目中用到了随机数,使用了SecureRandom.getInstance(“SHA1PRNG”),发现首次运行,时间极长。

本地是Windows环境,运行并不慢。

修改Linux的JVM环境,打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容

securerandom.source=file:/dev/random替换为securerandom.source=file:/dev/./urandom

查看本地环境后,竟然发现使用的是urandom。

本条转自:https://www.cnblogs.com/good-night/p/7490725.html

2)偶遇 JDK 1.8 还未修复的 SecureRandom.getInstance(“SHA1PRNG”) 之 bug

有用请点赞,养成良好习惯!

补充、交流请留言!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值