SecureRandom
Tip:
打开security的debug log
通过设置参数
-Djava.security.debug=all
可以控制台看到所有security的log
在JAVA中的配置发生器
在JAVA中可以通过两种方式去设置指定的随机数发生器
1.-Djava.security.egd=file:/dev/random或者 -Djava.security.egd=file:/dev/urandom
2.修改配置文件java.security 在jvm_home\jre\lib\security
参数securerandom.source=file:/dev/urandom
/dev/random 是堵塞的,在读取随机数的时候,当熵池值为空的时候会堵塞影响性能,尤其是系统大并发的生成随机数的时候,如果在随机数要求不高的情况下,可以去读取/dev/urandom
整个流程如下:
JAVA中首先读取系统参数java.security.egd,
如果值为空的时候,读取java.security配置文件中的参数securerandom.source,
在通常情况下,就是读取参数securerandom.source,默认值是/dev/urandom,也就是因该是不堵塞的。
但实际情况是,在测试linux环境下的时候,你会发现默认值却是堵塞的。
- SecureRandom类提供加密的强随机数生成器 (RNG)
- 当然,它的许多实现都是伪随机数生成器 (PRNG) 形式,这意味着它们将使用确定的算法根据实际的随机种子生成伪随机序列
- 也有其他实现可以生成实际的随机数
- 还有另一些实现则可能结合使用这两项技术
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");
2、SecureRandom的使用
2.1 nextBytes(byte[] bytes)
SecureRandom random = new SecureRandom(); byte[] test = new byte[20]; random.nextBytes(test);
2.2 generateSeed(int numBytes)
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<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获取思路
- 《利用系统时间可预测破解java随机数》
- 《当随机不够随机:一个在线扑克游戏的教训》
- 收集计算机的各种信息,如键盘输入时间,CPU时钟,内存使用状态,硬盘空闲空间,IO延时,进程数量,线程数量等信息,来得到一个近似随机的种子
- 这样的话,除了理论上有破解的可能,实际上基本没有被破解的可能。而事实上,现在的高强度的随机数生成器都是这样实现的
4、参考链接
- Java中生成随机数Random、ThreadLocalRandom、SecureRandom
- API参考 SecureRandom(示例,出错代码)
- Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom(转)
- SecureRandom的江湖偏方与真实效果
- Java 随机数 Random VS SecureRandom
https://www.cnblogs.com/deng-cc/p/8064481.html
转载于:https://www.cnblogs.com/softidea/p/9723711.html
SecureRandom相关推荐
- Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random, ThreadLocalRandom 即 ...
- Tomcat启动特慢之SecureRandom问题解决
tomcat启动日志: 08-Jun-2018 09:23:00.445 WARNING [localhost-startStop-1] org.apache.catalina.util.Sessio ...
- Tomcat 启动时 SecureRandom 非常慢解决办法
最近使用阿里云的 Ubuntu 16.04 ESC 服务器运行 Tomcat 时发现,Tomcat 启动的特别慢,通过查看日志,发现时间主要花在实例化 SecureRandom 对象上了. 由该日志可 ...
- java securt 视频,SecureRandom在Java中安全种子
Is this piece of code safe? SecureRandom randomizer = new SecureRandom(String.valueOf(new Date().get ...
- java响应很慢排插_服务响应时间慢:Java SecureRandom和/ dev / random - java
我正在尝试调试Tomcat上部署的应用程序提供的一些慢速响应. 现在,我主要关注SecureRandom和/dev/random(其他一些可能的原因已被调查并排除). 模式如下: 第一个调用恰好在To ...
- java 实现真正的随机数_关于java:SecureRandom的Android实现是否产生真正的随机数?...
我已经阅读过,一般来说,SecureRandom的一些实现可能会产生真正的随机数. 特别是,Android文档说 instances of this class will generate an in ...
- java securerandom使用_Java中的SecureRandom nextBytes()方法
用户指定的随机字节数可以使用nextBytes()类java.security.SecureRandom中的方法获得.该方法需要一个参数,即一个随机字节数组,它返回用户指定的随机字节. 演示此的程序如 ...
- 【java】java 随机数 Random ThreadLocalRandom SecureRandom
文章目录 1.概述 2.ThreadLocalRandom 2.1 Random 2.2 ThreadLocalRandom 2.2.1 验证会重复 2.2.2 解释 2. Random 和 Thre ...
- Tomcat学习总结(18)—— Tomcat启动时org.apache.catalina.util.SessionIdGenerator产生安全随机类SecureRandom的实例慢问题解决
Tomcat7/8使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例 ...
最新文章
- keepalived_nginx实现discuz负载均衡和高可用
- 4G EPS 中的无线资源类型
- 机器学习数据预处理代码汇总(最新更新20年3月1日)
- java 三种错误类型 区别_请列举至少三种在java语言中发生“严重错误”的情况...
- java异常中Exception捕获不到的异常
- Java前端技术汇总
- 数据分析工作到底在做什么
- Maya 2011, GUI with Qt
- WORD2003无法打开WORD2000文档解决方法
- X86_64 GNU汇编、寄存器、内嵌汇编
- [翻译] 在 Overleaf 中上传项目
- python成语接龙源代码,基于Tkinter,带成语解释
- 游戏开发经验之游戏App是先做大用户量 还是先盈利呢
- 代理模式(静态代理模式、动态代理模式、cgLib代理模式、拦截器)
- simulink模块名称显示设置_simulink模块名称继承
- Cannot invoke an object which is possibly ‘undefined‘.Vetur(2722)
- SYN010E型全国产铷原子钟
- 简单明了的介绍了python面向对象编程
- Access denied for user 'mysql用户名'@'主机或IP' (using password: YES)'
- 机器人 郭启寅_华昌达进军机器人