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

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()
    要求最高质量的熵
    熵不足时会阻塞等待
    最安全但可能性能很差

http://www.xdnf.cn/news/13634.html

相关文章:

  • ImportError: cannot import name ‘PfeifferConfig‘ from ‘transformers‘【已解决】
  • 考试中关于机动车安全技术检验标准(如 GB 7258、GB 21861 等)的考核重点有哪些?
  • java单元测试写法
  • Element:Table表头全部或单个表头颜色header-row-style
  • 鸿蒙开发:DevEcoTesting中的稳定性测试
  • 【Python 算法零基础 6.贪心算法】
  • 基于51单片机和8X8点阵屏、独立按键的跳跃躲闪类小游戏
  • 在WordPress中彻底关闭生成缩略图的方法
  • c++经典好题
  • 机器学习基本概念与建模流程
  • day031-Shell自动化编程-数组与案例
  • 【全开源】码小象租车系统源码+uniapp前端+开发文档接口
  • 【粤语ASRTTS】粤语语音识别与合成:重塑粤语智能化标杆
  • android studio开关控制
  • 小知识点二:无刷电机开环控制
  • 创建型设计模式
  • linux系统实时监控top命令
  • Spring Boot 完整教程 - 从入门到精通(全面版)
  • 鹰盾视频加密器播放器倍速播放中变速不变声的技术原理解析
  • 开源生态新势能: 驱动国产 DevSecOps 与 AI 工程新进展
  • DeepSeek-R1与Claude 4.0 Sonnet:开源与闭源大模型的商业生态博弈
  • 快速生成树协议(RSTP)深度解析
  • 基于 tinyfsm 的状态机
  • 未来智能设备的三大核心能力:自检测、自修复与自决策
  • 套接字类型与协议设置
  • 微信小程序之页面跳转(路由),navigateTo redirectTo reLaunch
  • 大型语言模型的中毒攻击的系统评价
  • 一款自制的OpenMV4模块
  • 网络原理8 - HTTP协议1
  • QDialog的show()方法与exec_()方法的区别详解