Random SecureRandom 随机数生成阻塞问题

Random的子类 SecureRandom 在k8s系统下的pod生成随机数特别慢问题 问题描述:我们使用一个SecureRandom.getInstanceStrong()获取random对象,来生成16位的随机数,然而在生成过程中每次生成pod里面日志看需要将近两分钟生成一个数,这个问题在我本地、预生产、线上都没有问题,只有测试有这个问题。一些是在关键位置打印日志发现的问题 针对整个问题,我们只需要一个唯一标识的字符串,我使用雪花算法代替--临时解决 -------------------------------------------------------------------. 阅读详情

java.util.Random

    生成随机数根使用系统时钟时间作为种子,采用线性同余生成算法生成随机数,由于使用时间作为种子因此攻击者如果知道系统时钟时间,可以寄计算并预测随机数生成内容,安全性低。因此推荐使用java.util.SecureRandom. 如果对于安全性要求不高,依旧可以使用Random, 生成速度比SecureRandom要快。

java.util.SecureRandom

   生成随机数使用系统随机数据作为种子,在linux系统中常见的随机数据取自/dev/random, /dev/urandom。Random生成的随机数如果攻击者暴力破解需要2^48,SecureRandom则需要2^128. SecureRandom默认使用Native PRNG算法生成随机数,如果程序调用随机数频率远高于系统生成的随机数熵的速率,则会出现生成随机数阻塞(nextBytes读取 /dev/random随机数据的速度远高于系统写入数据的速度)。

   注意:使用SecureRandom时,避免使用默认的SecureRandom.getInstanceStrong会导致生成随机数阻塞。应使用指定算法的实例SecureRandom.getInstance("NativePRNGNonBlocking")。对于SecureRandom,通过设置-Djava.security.egd=file:///dev/urandom是不生效的,因为SecureRandom有单独的配置,在jre/lib/security/java.security文件里:securerandom.strongAlgorithms=NativePRNGBlocking:SUN,默认算法NativePRNGBlocking。

 

Java随机数生成器选型与实战:从Math.random到SecureRandom全解析 随机数生成是软件系统中基础却关键的技术能力,涉及伪随机数生成器(PRNG)原理、线程安全机制、密码学安全性及JVM底层实现。理解Linear Congruential Generator(LCG)算法、种子(seed)控制、熵源依赖等核心概念,有助于规避高并发重复、安全密钥可预测、容器化阻塞等典型故障。在Java生态中,Math.random()、java.util.Random、ThreadLocalRandom和SecureRandom分别适用于单线程测试、多线程高性能场景、可重现逻辑与密码学安全需求。 阅读详情

相关推荐

如何用Deep OC-SORT提升多目标跟踪精度?实战配置与性能优化指南

本文是一份针对开发者的Deep OC-SORT多目标跟踪实战指南。详细解析了如何通过部署其核心的“动态外观记忆”与“相机防抖”模块来有效应对遮挡与抖动,从而显著提升跟踪精度与连续性。内容涵盖从环境搭建、参数调优到性能压榨的全流程,并提供针对不同场景的配置建议与工程落地技巧。

f9g0h的博客 670

Linux服务器中SecureRandom生成随机数非常慢,NativePRNG$Blocking 阻塞

dev/random生成的随机数是基于环境噪声和硬件事件的熵源。/dev/random生成的随机数是基于环境噪声和硬件事件的熵源。它会收集来自硬件设备(如鼠标移动、键盘敲击、磁盘活动等)和操作系统事件(如进程调度、网络活动等)的随机性信息,并将这些信息转化为随机数。SecureRandom类使用了多种熵源来生成随机数,包括操作系统提供的随机性源、硬件随机数生成器和其他可用的随机性源。这种多样化的熵源提供了更高的随机性和抵抗性,使得生成的随机数更难以预测和破解。问题已经定位到了,/dev/random。

篱笆女人和狗的博客 2126

恶意代码实验3:Word宏病毒实验

只要下次打开这个word文档,就会执行以上代码,并将自身复制到Normal.dot(word文档的公共模板)和当前文档的ThisDocument中,同时改变函数名(模板中为Document_Close,当前文档为Document_Open),此时所有的word文档打开和关闭时,都将运行以上的病毒代码,可以加入适当的恶意代码,影响word的正常使用,本例中只是简单的跳出一个提示框。回答不正确三次,即可自动跳出病毒程序,但那时已经出现几十个文档。1、打开的宏编辑器如图所示,即可编写病毒代码。

qq_63949327的博客 6505

Java Random可破解,随机数不再随机,更不安全

不要再用 ~Random~

weixin_54542328的博客 2118

大语言模型在建筑规范自动化合规审查中的微调策略与规模效应实践

大语言模型(LLM)通过在海量文本数据上预训练,具备了强大的语言理解和生成能力。其核心原理是基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。在工程实践中,为了将这种通用能力适配到建筑、法律、金融等高度专业化的垂直领域,通常需要采用领域微调技术。微调通过使用特定领域的高质量指令数据对模型参数进行更新,使其掌握专业术语、逻辑规则和任务范式,从而解决通用模型在专业场景下知识匮乏和“幻觉”问题。结合检索增强生成(RAG)技术,将动态外部知识库作为模型的“参考手册”,能进一步提升事实准确性并降低幻

weixin_30667831的博客 364

达梦7实时主备集群

达梦7实时主备配置实时主备数据环境说明配置主库配置 dm.ini配置dmmal.ini配置dmarch.ini配置dmwatcher.ini配置dmwatcher.ini以mount方式启动主库设置OGUID修改数据库为primary模式配置备库 在服务器部署过程中,通常搭建有数据库主备集群,用于防备数据库服务器产生问题影响数据正常,在此,我们分享一下在虚拟机环境中模拟搭建实时主备的数据守护模式。 在搭建环境之前,需用户确认主备DM7的数据库已安装完成,且版本一致,同时还应注意各实例所在主机的操作系统位数、

g360382的博客 1022

计算机掷骰子吗?关于随机数的一些细节

在计算机领域,随机数是一个十分重要的机制,除了模拟客观世界的随机现象,有一些场景本身就需要随机数,比如 AES 对称机密算法中需要一个随机数作为密钥,以及 TCP 连接”三次握手“时 TCP 头的 seq 字段应该初始化为随机值。对于人类来说,人脑无法凭空创造出随机数,至少无法证明构思的数字是一个随机数,人类只能借助硬币和骰子等工具来得到一个随机的数字。作为在计算方面比人脑更强大的计算机,能否创造出随机数呢,还是计算机也需要“骰子”呢?

BASK2311的博客 1196

什么是以太网链路聚合

以太网链路聚合技术通过将多个物理端口捆绑成逻辑端口,可显著提升网络性能。该技术能增加总带宽(各链路带宽之和)、提高可靠性(故障秒级切换)并实现智能负载分担。主要分为手工模式和基于LACP协议的动态模式,后者能检测链路故障更可靠。配置时需确保接口参数一致、模式匹配,适用于核心交换、服务器接入等场景。华为设备通过创建Eth-Trunk接口、指定LACP模式并添加成员接口即可完成部署。这项成熟技术能以低成本解决带宽瓶颈和可靠性问题,是构建高速稳定网络的关键方案。

lai_2020的博客 675

SecureRandom生成随机数慢(阻塞)问题解决记录

Java的随机数实现有很多坑,记录一下这次使用jdk1.8里新增的加强版随机数实现SecureRandom.getInstanceStrong()遇到的问题。 之前在维护ali-tomcat的时候曾发现过jvm随机数算法选用不当导致tomcat的SessionID生成非常慢的情况,可以参考JVM上的随机数与熵池策略和Docker中apache-tomcat启动慢的问题这两篇文章。不过当时...

liinux-Talk is cheap,show me the code. 4022

西门子S7-1200模拟量的使用

模块类型核心参数输入信号处理输出信号配置转换原理数值范围TIA Portal配置编程要点 转换公式: 输出模拟量: 五、校准与线性化 硬件校准非线性补偿抗干扰措施数字滤波温度控制压力监控流量调节信号异常精度不足实践操作参考文档项目案例借鉴博客

weixin_51020122的博客 4773

第十篇|网络子系统 ②——无损以太网、PFC/ECN、DCQCN 与拥塞可视化

网络部分了解了解

qq_37535542的博客 1874

Java 8 SecureRandom 生成随机数

Java 8的SecureRandom API对原有的有几个变化 根据Oracle,已经做出了以下有趣的变化: 对于类UNIX平台,已经引入了两个新的实现,它们提供了阻塞和非阻塞行为:NativePRNGBlocking和NativePRNGNonBlocking。所述getInstanceStrong()方法是在JDK 8中引入此方法返回的每个平台上可用的最强SecureRa

Hatsune_Miku_的博客 3万+

uniapp:解决微信小程序包体积超过2M的优化方案+详解分包问题,编译小程序体积大于2M不能上传和预览提示体积太大的处理教程,uniApp微信小程序主包过大问题如何解决(排查可疑点+分包+最小改动)

uniapp微信小程序开发,如何解决打包太大无法预览发布的问题,uniApp微信小程序包体积超过2M的优化方法,uni-app打包微信小程序主包超2M终极解决方案,使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法,UniApp开发的微信小程序主包过大问题及解决方案 编译小程序时Node-modules被打入主包,小程序体积大于2M不能上传和预览,怎么处理,解决微信小程序主包太大问题,微信小程序中主包和分包过大,详解分包问题,uni-app 微信小程序发布时,主包超

✅ 精选推荐文章 5066

SecureRandom 在Linux 环境下线程阻塞问题

项目中遇到一个问题,排查了一天,终于知道原因了。 环境介绍:本地 windos,正式 linux 用Random生成随机数,然后扫描软件说不安全,不推荐用,推荐用SecureRandom,然后改成这样。 Random rand = SecureRandom.getInstanceStrong(); int i2 = rand.nextInt(i); 改完之后测试本地没有问题,发布,然后正式调用这个方法的页面,死活保存不了,后台也不报错。用最笨的方法每行代码下面打印一句话的方法,发现是随机数的问

xingyuncaojun的博客 1445

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

代码评审——随机数Random问题

为了获取唯一值,经常会依赖产生随机数来保证唯一性。在获取随机数时,如果使用错误的方法,会比较低效。

月空的博客 2574

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

linux random不阻塞,随机数阻塞问题

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?有个使用了SpringBoot的API的项目拆分了不同业务的服务,一个jar包通过不同的命令行来启动不同的10个业务进程.所以发布版本的时候基本上是重启所有的进程. 偶然的一次线上发布看业务日志,发现进程启动的时候卡在tomcat embeded初始化的时候.而且基本上重启的进程都卡住了.定位找出其中一个进程,执行了工具...

weixin_39667797的博客 485

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SecureRandom生成随机数超慢 导致tomcat启动时间过长的解决办法

使用腾讯云的CentOS 7.2 CVM 服务器跑Tomcat时发现,Tomcat启动的特别慢,通过查看日志,发现时间主要花在实例化SecureRandom对象上了。由该日志可以看出,实例化该对象使用了460秒,导致整个应用启动了480秒之久。根本原因是SecureRandom 这个jre的工具类的问题. 具体内容:JDK-6521844 : SecureRandom hangs on Linux

一黑到底 1万+

linux多线程随机数,随机数SecureRandom在Linux下阻塞

问题背景在项目中,需要使用随机数,直接使用new Random()效率太低,为了提高随机性和性能,sonar建议,使用子类java.security.SecureRandom来实现。问题程序public class Test {public static void main(String[] args) throws java.security.NoSuchAlgorithmException {...

weixin_35973521的博客 675

使用 SecureRandom 产生随机数采坑记录

背景 我们的项目工程里经常在每个函数需要用到 Random 的地方定义一下 Random 变量(如下) public void doSomethingCommon() { Random rand = new Random(); ... } 在用 sonar 进行检查时,会发现会有如下告警 Creating a new Random object each time a random...

weixin_41385912的博客 3853

SecureRandom.getInstanceStrong()引发的线程阻塞

概述 sonar扫描到使用Random随机函数不安全,推荐使用SecureRandom替换,当使用SecureRandom.getInstanceStrong()获取SecureRandom并调用next方式是,在linux产生较长时间的阻塞,但开发环境(windows7)并未重现。 问题现象 测试代码: package com.study.practice.secure; import java.security.NoSuchAlgorithmException; import java.securit

抽象的螺旋 2027

Tomcat 启动时 SecureRandom 非常慢解决办法,亲测有效

1.找到jre—>lib—>security 2.找到 securerandom.source=file:/dev/random 替换成:securerandom.source=file:/...

QDY5945的博客 647

jdk1.8 SecureRandom线程阻塞解决方法

最近vms-voice项目在发了一个版本之后,发现有个接口总是漏数据,于是通过增加日志进行定位和排查,最后定位到一个简单的for循环,如下图: 上午一行begin日志会打印,下面的end不会打印,而且没有异常和错误抛出。这就是一个简单的for循环,然后设置一下redis,太不符合逻辑科学了。 整个for循环里面可能出问题的代码只有3个点: 生成随机数 序列化 设置redis 凭直觉肯定没结果,只能在for循环里面增加日志,最终锁定问题出现在随机数生成的方法调用那一行。 ...

weixin_41123389的博客 1264

Bug 记录:SecureRandom.getInstanceStrong()导致验证码获取阻塞

在发送验证码到邮件中,接口调用时卡在生成验证码阶段,导致验证码功能完全不可用;经排查开发环境一切正常,测试环境会重现此问题;

objectdsf的博客 922

Java new SecureRandom()为何慢

最近启动Java服务,发现new SecureRandom()时间特别慢,于是研究了慢的原因,记录如下。

ParanoidT的博客 1047

多线程下使用随机数ThreadLocalRandom

用CAS把老的种子替换为新的种子,这样做以后,在竞争比较激烈的环境下,会造成大量的线程自旋,消耗CPU,因为每次CAS操作只能有一个线程能成功。读取/dev/random会阻塞的原因,是因为/dev/random中的数据来自系统的扰动, 比如键盘输入, 鼠标点击, 等等, 当系统扰动很小时, 产生的随机数不够, 导致读取/dev/random的进程会阻塞等待.Random是我们使用随机数的常用的一个类,他的原理四是根据一个老的种子生成新的种子,再根据新的种子去生成随机数。放到linux上运行就卡住了。

最后的武艺集大成者 1444
上一篇: python3 (pip3 install threading: ERROR: Cloud not find a version that satisfies the requirement ..)
下一篇: Shiro (http:/xxxxx/;JSESSIONID=xxxx) InvalidRequestFilter 400无法跳转到登录页问题
mcatto
博客等级 码龄15年 87粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值