当前位置: 首页 > news >正文

SecureRandom.getInstanceStrong() 与虚拟机的爱恨情仇

问题描述

使用Ruoyi-cloud 二开,将服务部署到虚拟机上后,准备登录,发现验证码一致加载不出来,接口请求超时!

解决步骤

  1. telnet 虚拟机ip+port 发现可以通.
  2. curl 接口,发现一致不返回,超时了.
  3. /code 接口超时,一步一步log,测试后发现在迭代验证码时超时,询问ai.

结论

SecureRandom.getInstancestrong()方法会返回一个"强"随机数生成器,它需要收集足够的系统熵(随机性)才能生成随机数。在某些系统环境下,特别是虚拟机或源不足的服务器上,这个过程可能会阻塞很长时间,等待系统收集足够的随机熵。

学习到的知识

什么是系统熵?

熵源包括:
  • 键盘敲击的时间间隔
  • 鼠标移动的轨迹和时间
  • 硬盘读写的时间差
  • 网络数据包到达的时间
  • 中断发生的时间
  • CPU温度变化
  • 内存访问模式
  • 系统调用的时间差

Linux系统中的熵:
存储在 /dev/random 和 /dev/urandom 中内核维护一个熵池,收集各种不可预测的事件可以通过 cat /proc/sys/kernel/random/entropy_avail 查看当前可用熵

为什么会阻塞?

熵不足的情况:

  • 虚拟机环境:缺少真实硬件的随机性
  • 服务器环境:无键盘鼠标交互,硬件活动单一
  • 嵌入式设备:硬件资源有限
  • 刚启动的系统:还没收集足够的随机事件
SecureRandom.getInstanceStrong() 
→ 要求高质量熵 
→ 熵池不足时等待
→ 系统收集更多随机事件
→ 阻塞直到熵足够

不同随机数生成器的区别

  1. new Random()
    伪随机数生成器
    基于算法,可预测
    性能最好,但不安全

  2. new SecureRandom()
    使用系统熵,但有后备算法
    熵不足时使用算法扩展
    平衡了安全性和性能

  3. SecureRandom.getInstanceStrong()
    要求最高质量的熵
    熵不足时会阻塞等待
    最安全但可能性能很差

相关文章:

  • 【更新】中国经济政策不确定性指数数据集(2000.1-2025.5)
  • 2025 年二级造价工程师职业资格考试的报考条件有哪些新变化?
  • 【Java】Arrays.sort:TimSort
  • 560. 和为K的子数组
  • 软件测试之APP测试要点(包含Monkey基础使用)
  • C++实现文本编辑功能
  • C primer plus (第六版)第七章 编程练习第4题,第5题
  • 企业如何高效构建BI团队,解锁数据价值新高地?
  • 解锁Wi-SUN潜能!移远通信发布KCM0A5S模组,点亮智慧城市新图景
  • 利用递归来遍历树
  • 蛋糕烘焙小程序源码介绍
  • 阿糖胞苷联合伊达比星为代表的强化治疗方案引领AML多阶段治疗新进展
  • UFS-Ver3.1-第九章
  • docker 安装postgre并使用php进行连接
  • Nextcloud的性能提升3倍的部署说明:你的nextcloud需要重新部署了
  • day64—回溯—组合数(LeetCode-77)
  • Verilog:流水线乘法器
  • Unity Android 启动应用的时候黑屏问题
  • 关于亚马逊WOOT折扣力度
  • 【沉浸式解决问题】csdn无法发布文章
  • 用dw怎么做酷炫的网站/江门seo外包公司
  • 做网站最新技术/网站推广营销运营方式
  • 网站设计与建设系统/网销是做什么的
  • 求婚策划公司/揭阳新站seo方案
  • 上海做网站/西安seo外包服务
  • 仿牌独立站/百度员工收入工资表