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 ...
随机推荐
- js+springMVC 提交数组数据到后台
1.ajax 代码 var ids =new Array(); $.ajax({ type: "POST", url: "/user/downReport", ...
- 如何将web项目部署到Ubuntu服务器上
情景回顾: 前几天在下本着人道主义原则帮我老师的一个朋友做了个小网页,(啥人道不人道的,主要是给钱了),做完之后本来是想偷懒直接把网页扔给他自己部署去吧,结果让我帮忙部署一下,得,偷懒也偷不成了,搞吧 ...
- 【代码笔记】Web-ionic 网格(Grid)
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- express koa koa2 优缺点分析
发布日期 2009年6月26日,TJ 提交 Express 第一次 commit.目前拥有 5000 多次 commit. 2013年8月17日, TJ 只身一人提交 Koa 第一次 commit.目 ...
- Clumsy 利用无线网卡结合Clumsy软件模拟弱网络测试
利用无线网卡结合Clumsy软件模拟弱网络测试 by:授客 QQ:1033553122 实践环境 Clumsy 0.2 下载地址:http://jagt.github.io/clumsy/downlo ...
- angular升级指南
废话少说 上链接 angular 升级指南
- 洗礼灵魂,修炼python(52)--爬虫篇—【转载】爬虫工具列表
与爬虫相关的常用模块列表. 原文出处:传送门链接 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络 ...
- Android中SELinux的TE简介【转】
转自:https://blog.csdn.net/murphykwu/article/details/52457667 selinux的概念如上一篇链接所示: http://www.cnblogs.c ...
- php解决前后端验证字符串长度不一致
前端代码 function getStrleng(str){ var myLen =0; for(var i=0;i<str.length;i++){ if(str.charCodeAt(i)& ...
- 安全之路 —— C/C++实现利用添加注册表项实现文件自启动
简介 添加注册表项是实现文件自启动的经典方法之一,但因为操作注册表项是一个敏感操作,被报毒可能性较大,但即便如此,这个方法还是值得一学的,因为后期大部分编程都涉及到注册表操作. 最常使用到的注册表项有 ...