SecureRandom
- SecureRandom类提供加密的强随机数生成器 (RNG)
- 当然,它的许多实现都是伪随机数生成器 (PRNG) 形式,这意味着它们将使用确定的算法根据实际的随机种子生成伪随机序列
- 也有其他实现可以生成实际的随机数
- 还有另一些实现则可能结合使用这两项技术
SecureRandom generater = new SecureRandom();
System.out.println(generater.nextInt(37));
SecureRandom generater = new SecureRandom();
System.out.println(generater.nextInt(37));
1、创建SecureRandom
1.1 new
1.2 getInstance
- 其中需要传参的方法,则传算法名即可,如果不存在算法会抛出异常;
- 另外需要传参,传两个参数的,第二个参数还可以指定算法程序包。
SecureRandom secureRandom = new SecureRandom();
SecureRandom secureRandom3 = SecureRandom.getInstance("SHA1PRNG");
SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG", "SUN");
SecureRandom secureRandom = new SecureRandom();
SecureRandom secureRandom3 = SecureRandom.getInstance("SHA1PRNG");
SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG", "SUN");
2、SecureRandom的使用
2.1 nextBytes(byte[] bytes)
SecureRandom random = new SecureRandom();
byte[] test = new byte[20];
random.nextBytes(test);
SecureRandom random = new SecureRandom();
byte[] test = new byte[20];
random.nextBytes(test);
2.2 generateSeed(int numBytes)
byte seed[] = random.generateSeed(20);
byte seed[] = random.generateSeed(20);
2.3 示例 彩票随机生成器
private List<List<Integer>> generateCakes(int num, int seedLength, int rowLen) {
SecureRandom random = new SecureRandom();
// シードを生成する
byte[] seeds = SecureRandom.getSeed(seedLength); //获取随机的byte数组,用来后续作为种子
// 項目数を制御するためのカウンター
int counter = 0;
// 実際ループの回数を記録
int realCount = 0;
// 生成する組数を制御するためのカウンター
int tmprows = 0;
// 返すためのList
List<List<Integer>> CakesList = new ArrayList<List<Integer>>();
while (num > tmprows) {
List<Integer> list = new ArrayList<Integer>();
while (counter < rowLen) {
random.setSeed(seeds); //设置种子
int cake = random.nextInt(38); //随机生成0-37的数字
if (!list.contains(cake) && 0 != cake) {
list.add(cake);
counter++;
}
random.nextBytes(seeds); //随机获取新的byte数组用以作为下次的种子,不断循环
realCount++;
}
Collections.sort(list);
pairs++;
tmprows++;
counter = 0;
CakesList.add(list);
if (pairs % Constants.MSG_COUNT == 0) {
System.out.println(pairs + " cakes generated.");
}
}
System.out.println("乱数取得回数:" + realCount);
return CakesList;
}
private List<List<Integer>> generateCakes(int num, int seedLength, int rowLen) {
SecureRandom random = new SecureRandom();
// シードを生成する
byte[] seeds = SecureRandom.getSeed(seedLength); //获取随机的byte数组,用来后续作为种子
// 項目数を制御するためのカウンター
int counter = 0;
// 実際ループの回数を記録
int realCount = 0;
// 生成する組数を制御するためのカウンター
int tmprows = 0;
// 返すためのList
List<List<Integer>> CakesList = new ArrayList<List<Integer>>();
while (num > tmprows) {
List<Integer> list = new ArrayList<Integer>();
while (counter < rowLen) {
random.setSeed(seeds); //设置种子
int cake = random.nextInt(38); //随机生成0-37的数字
if (!list.contains(cake) && 0 != cake) {
list.add(cake);
counter++;
}
random.nextBytes(seeds); //随机获取新的byte数组用以作为下次的种子,不断循环
realCount++;
}
Collections.sort(list);
pairs++;
tmprows++;
counter = 0;
CakesList.add(list);
if (pairs % Constants.MSG_COUNT == 0) {
System.out.println(pairs + " cakes generated.");
}
}
System.out.println("乱数取得回数:" + realCount);
return CakesList;
}
3、其他 关于种子seed获取思路
- 收集计算机的各种信息,如键盘输入时间,CPU时钟,内存使用状态,硬盘空闲空间,IO延时,进程数量,线程数量等信息,来得到一个近似随机的种子
- 这样的话,除了理论上有破解的可能,实际上基本没有被破解的可能。而事实上,现在的高强度的随机数生成器都是这样实现的
4、参考链接
SecureRandom的更多相关文章
- 使用SecureRandom类替代Random类
java.util.Random 产生确定的值可能被恶意的程序预测到. java.security.SecureRandom 产生不确定的随机数不能被预测到. 所以优先使用java.security. ...
- Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom(转)
文中的 Random即:java.util.Random,ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandomSecureRandom即 ...
- Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random,ThreadLocalRandom 即: ...
- [转]Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp84 Random即:java.util.Random, ThreadL ...
- [解决]Linux Tomcat启动慢--Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [236,325] milliseconds
一.背景 今天部署项目到tomcat,执行./startup.sh命令之后,访问项目迟迟加载不出来,查看日志又没报错(其实是我粗心了,当时tomcat日志还没打印完),一开始怀疑是阿里云主机出现问题, ...
- Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [33,755] milliseconds.
刚部署好程序,第一次登录时,加载非常得慢,查看log日志发现:Creation of SecureRandom instance for session ID generation using [SH ...
- Tomcat 启动时 SecureRandom 非常慢解决办法,亲测有效
1.找到jre—>lib—>security 2.找到 securerandom.source=file:/dev/random 替换成:securerandom.source= ...
- Tomcat启动特慢之SecureRandom问题解决
tomcat启动日志: 08-Jun-2018 09:23:00.445 WARNING [localhost-startStop-1] org.apache.catalina.util.Sessio ...
- Tomcat8 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [53,161] milliseconds
修改$JAVA_PATH/jre/lib/security/java.security文件 将 securerandom.source=file:/dev/random 修改为 securerando ...
- java.security.SecureRandom源码分析 java.security.egd=file:/dev/./urandom
SecureRandom在java各种组件中使用广泛,可以可靠的产生随机数.但在大量产生随机数的场景下,性能会较低. 这时可以使用"-Djava.security.egd=file:/dev ...
随机推荐
- sessionStorage记录返回前端的数据,用于解决登录拦截器刷新页面的问题
1.问题出现的场景与解决 实现一个登录拦截器,重写doFilter方法,判断用户的登录状态,在用户长时间未操作或者异地登录时前端进行提示,完整代码如下 public class LoginValida ...
- HTML5实现video标签的自定义播放进度条
现在随着html5的渐热,越来越多的web开发者都开始选择使用html5写出一些比较好的web应用. html代码: <!DOCTYPE html> <html lang=" ...
- 从gitHub上拉取并运行项目
今天我们来试一下如何从gitHub上拉取一个项目并且运行起来,话不多说,我们直接开搞可好 1.首先我们先获取到项目地址(此处我以自己的项目地址作为示例) 我们选择红圈处的clone or downlo ...
- 【读书笔记】iOS-工作区的使用
一,打开Xcode--->File-->New-->Workspace--->AllProject. 二,打开桌面上的AllProject--->File--->N ...
- Spark jdbc postgresql数据库连接和写入操作源码解读
概述:Spark postgresql jdbc 数据库连接和写入操作源码解读,详细记录了SparkSQL对数据库的操作,通过java程序,在本地开发和运行.整体为,Spark建立数据库连接,读取数据 ...
- Apex 的异常处理
Apex 中的异常处理 在 Apex 中,和其他语言类似,对于异常处理通常使用 try.catch.finally.throw 等关键字. 对于每一个 try 代码段,必须要有至少一个 catch 或 ...
- U8 应付款管理 单据类型 分析
Ap_CloseBill 收付款单主表 Ap_CloseBills 收付款单子表 cVouchType 在收付款单主表中 ,用于区分单据为收款单还是付款单(48,49) 49:付款单 48:收 ...
- system.img镜像转换为system.new.dat + system.transfer.list
android 8.1上面验证,支持所有的android版本,直接放到sdk中执行即可. img2sdat.py #!/usr/bin/env python #coding=utf-8 imp ...
- 利用python实现简单词频统计、构建词云
1.利用jieba分词,排除停用词stopword之后,对文章中的词进行词频统计,并用matplotlib进行直方图展示 # coding: utf-8 import codecs import ma ...
- [20171211]ora-16014 11g.txt
[20171211]ora-16014 11g.txt --//上午测试了10g下备库log_archive_dest_1参数配置VALID_FOR=(ONLINE_LOGFILES,ALL_ROLE ...