线性同余法生成随机数Matlab_生成安全的随机数

2023-11-05

0x01:生产随机数的方式

  • Math.random()0到1之间随机数
  • java.util.Random伪随机数(线性同余法生成)
  • java.security.SecureRandom真随机数
  • java.util.concurrent.ThreadLocalRandom每一个线程有一个独立的随机数生成器

0x02:Math.random()

Math.random()产生的随机数是在0 到1之间的一个double类型的随机数,即 0 <= random <= 1

例子

public static void main(String[] args) { for(int i=0; i<10; i++){ System.out.println(Math.random()); } }

结果

0.55618691753422430.86408888351504140.2928147316268310.98735487802474750.323925041909681970.0232301114478186130.79118793895482530.64530781588057550.82554439407429070.0476070934096563

看下图

从源码分析发现,调用Math.random()方法时,自动创建了一个伪随机数生成器,实际上用的是new java.util.Random()。

0x03:java.util.Random伪随机数

java.util.Random采用线性同余法伪随机数生成器(linear congruential pseudorandom number generator [简称LGC]),所以该随机数具有可预测性的缺点。在注重信息安全的应用中,不要使用 LCG 算法生成随机数,请使用 java.security.SecureRandom。

例子

public static void main(String[] args) { Random random = new Random(); for(int i=0; i<10; i++){ System.out.println(random.nextInt()); } }

结果

-932663432-1051420847-1702465501965458676-201833620613997342061142954832-1274289135918821980-537649235

java.util.Random类默认使用当前系统时钟作为种子

Random类提供的方法:

  • java.util.nextBoolean() - 返回均匀分布的 true 或者 false
  • nextBytes(byte[] bytes)
  • nextDouble() - 返回 0.0 到 1.0 之间的均匀分布的 double,Math.random() 调用的就是该方法
  • nextFloat() - 返回 0.0 到 1.0 之间的均匀分布的 float
  • nextGaussian() - 返回 0.0 到 1.0 之间的高斯分布(即正态分布)的 double
  • nextInt() - 返回均匀分布的 int
  • nextInt(int n) - 返回 0 到 n 之间的均匀分布的 int (包括 0,不包括 n)
  • nextLong() - 返回均匀分布的 long
  • setSeed(long seed) - 设置种子

另外只要种子一样,产生的随机数也一样; 因为种子确定,随机数算法也就确定了,所以输出是确定的。

例子

public static void main(String[] args) { Random random1 = new Random(1000); Random random2 = new Random(1000); for(int i=0; i<10; i++){ System.out.println("random1 = "+ random1.nextInt() + 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线性同余法生成随机数Matlab_生成安全的随机数 的相关文章

  • pthread_mutex_t

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 互斥锁创建 有两种方法创建互斥锁 静态方式和动态方式 POSIX定义了一个宏PTHREAD MUTEX INITIALIZER来静态初始化互斥锁 方法如下 pthrea
  • Mybatis使用注解方式配置

    目录 1 介绍 2 初始化工程 2 1 导包 2 2 导配置 3 使用注解增删改查 3 1 环境准备 3 1 1 建库建表 3 1 2 创建Student实体类 3 1 3 创建StudentDao接口 3 1 4 配置映射关系 3 2 查
  • Python Matplotlib 实用小技巧!

    转自 网络 今天给大家介绍Matplotlib绘图实用的小技巧 1 添加标题 title matplotlib pyplot 对象中有个 title 可以设置表格的标题 import numpy as np import matplotli
  • django前端模板循环多个list

    这一部分主要涉及到后台View的设计 前端HTML页面的设计 后台设计View from django views generic import View class ForTrView View def get self request
  • PCL 区域生长分割(C++详细过程版)

    区域生长 一 概述 二 代码实现 三 结果展示 1 原始点云 2 聚类结果 四 相关链接 一 概述 区域生长分割是PCL里经典的点云聚类分割算法 具体算法原理和实现代码见 PCL 区域生长分割 为充分了解算法实现的每一个细节和有待改进的地方
  • display:none元素不可见,可通过JS方法把它修改为可见

    页面元素无论用什么xpath都无法定位 by id class name都试过了 可以去页面看看是否这个元素的display是none display none方法是设置元素不可见 所以解决办法就是首先通过JS方法把它修改为可见 js do
  • Kafka 创建 两个topic 一个用于发送信息 一个用于接收Flink处理之后的信息

    Kafka 创建 两个topic 一个用于发送信息 一个用于接收Flink处理之后的信息 Kafka生产者Java代码 package cn oneseek import cn oneseek util JsonData import or
  • 网络工程专业毕设题目选题大全

    文章目录 0 简介 1 如何选题 2 最新网络工程选题 2 1 Java web SSM 系统 2 2 大数据方向 2 3 人工智能方向 2 4 其他方向 4 最后 0 简介 学长搜集分享最新的网络工程专业毕设毕设选题 难度适中 适合作为毕
  • vue入门教程之-属性、事件和双向绑定

    vue入门教程之 属性 事件和双向绑定 欢迎关注博主公众号 java大师 专注于分享Java领域干货文章 关注回复 资源 免费领取全网最热的Java架构师学习PDF 转载请注明出处 https www javaman cn vue vue
  • 【JAVA

    package learn import java awt import javax swing import java awt event public class PinBall private Frame frame new Fram
  • 中国金融牌照全解读

    前言 金融牌照 即金融机构经营许可证 是批准金融机构开展业务的正式文件 目前金融许可证由银监会 证监会和保监会等部门分别颁发 金融监管根据时段划分为事前监管 事中监管 事后监管 市场准入制度是事前监管的核心 金融许可证则是市场准入制度的常态
  • ITERM2 自动登录跳板机脚本(多跳、带动态TOKEN)

    代码如下 设置方式是 iterm2 preference Profiles 新建一个profile 并设置Name为a Command为 Users XXX Desktop a sh 在sen text as start内传入4个参数 US
  • Android开发——菜单(Menu)-——选项菜单(OptionMenu)

    Menu 在Android3 0以前的menu显示 是用户点击手机下方操作按钮的菜单按钮时 会从界面底部向上弹出菜单 菜单内容出现在屏幕底部 可以包含六个及以上的菜单项 超出的部分则以 更多 来显示 在Android3 0以后的更高版本的系
  • git clone使用方法

    步骤是转载的该文章 后面有添加自己的要注意的地方 不完全一样 仅码住自用 使用Git clone项目 1 首先我们要确保我们的电脑上已经安装Git 桌面点击右键出现如下图所示的两个Git即Git已经安装 2 在电脑的任意一个磁盘里新建一个本
  • ARM公司发展史

    目录 1 前言 2 ARM公司发展史 3 ARM架构发展史 3 1ARMv1架构 3 2 ARMv2架构 3 3 ARMv3架构 3 4 ARMv4架构 3 5 ARMv5架构 3 6 ARMv6架构 3 7 ARMv7架构 3 8 ARM
  • 关于存储器按字节寻址和按字寻址的理解

    关于存储器按字节寻址和按字寻址的理解 近日在学习MOOC上学习哈工大刘宏伟老师的 计算机系统组成原理 课程 在4 1节提到主存的时候简单地提到一下关于按字节寻址和按字寻址的寻址空间问题 个人非常疑惑于是各处搜索查找资料 下面是本人就这个问题
  • 【机器学习】左逆、右逆、伪逆和广义逆的概念理解

    逆矩阵 对于矩阵 A A A 如果存在一个矩阵 B B B 使得 A B B
  • spring boot配置logback日志

    spring boot配置logback日志 第一次用 markdown编辑 哈哈 在上一篇spring boot入门里提过 Spring Boot默认的日志打印是logback 所以配置logback日志会很简单 但是也有注意的地方 本次

随机推荐

  • vue实时监听窗口宽度变化

    自适应 向来是前端工程师需要解决的一大问题 即便作为当今非常火热的vue框架 也无法摆脱 虽然elementui iview等开源UI组件库层出不穷 但官方库毕竟不可能满足全部需求 因此我们可以通过 监听窗口变化 达到想要的绝大部分自适应效
  • spring Cache的缓存记录

    使用Spring Cache需要我们做两方面的事 n 声明某些方法使用缓存 n 配置Spring对Cache的支持 和Spring对事务管理的支持一样 Spring对Cache的支持也有基于注解和基于XML配置两种方式 下面我们先来看看基于
  • C++(day3)

    思维导图 封装顺序栈 stack h ifndef STACK H define STACK H include
  • 激活函数之ReLU/softplus介绍及C++实现

    softplus函数 softplus function x ln 1 exp x softplus函数可以用来产生正态分布的 和 参数 因为它的范围是 0 当处理包含sigmoid函数的表达式时它也经常出现 softplus函数名字来源于
  • 裸奔时代,区块链技术能否帮助我们保护个人隐私?

    在这个信息交流飞速发展的年代 在人们在享受互联网信息带来的便利的同时 常常会感慨这是一个没有隐私的裸奔时代 对于个人信息的泄露大家已经见怪不怪了 网络爬虫 人肉搜索等手段的问世 将人们的生活置于各种显微镜下 各种促销或骚扰电话让人不胜其烦
  • python中函数介绍及其运用

    前言 一 定义函数 二 传递实参 1 位置实参 2 关键字实参 3 给形参指定默认值 三 函数返回值 1 返回简单值 2 返回字典 3 结合使用函数和while 循环 四 传递列表 1 在函数中调用列表 2 在函数中修改列表 3 禁止在函数
  • qt中信号与槽多次调用的问题及信号与槽的连接方式问题

    发送一次信号 调用多次槽函数问题 在同一个类中 多次链接QObject connect sender SIGNAL signalSender QString int receiver SLOT onSignalSender QString
  • java poi 4.1.2 操作excel说明

    文章目录 描述 导包 excel写入 excel读取 数据类型与多行多列 描述 poi是Apache下一款java语言excle高效读写工具 本博客将从读 写等方面做说明 xls 2007前版本 和xlsx 2007版本和此后 使用不同类
  • bat:使用bat脚本获得文件名,修改时间,大小

    echo for i in D J 1012 ftprun log do echo nxi echo zi字节 echo ti echo Y gt ni log pause
  • 固高运动控制卡IO口输入输出

    固高运动控制卡开发资料 关注我免费下载 输入 板卡上的输入 long ss 0 GT GetDi MC GPI ss bool gpists 1 lt lt bit 1 bit为输入接口号 拓展模块的输入 short Extflag 0 返
  • Qt 样式表之QSS

    前言 最近想给程序做个换皮肤的功能 于是想起了用 QSS QSS 这个东西也算是老古董了 博主刚工作那会就有接触过 但是没有深入去了解 趁着这一次机会来学习一下 网上翻阅了一些资料 结合 Qt 的官方文档 博主把 QSS 的相关知识点整理了
  • [1063]CM+CDH6.3.2环境搭建(全网最全)

    文章目录 1 环境准备 1 1 三台虚拟机准备 1 2 常用yum源更新 gcc G C 等环境 可以跳过 1 3 配置本地yum云 1 3 1 更新yum源httpd 1 3 2 更新yum源yum utils 1 3 3 将下载好的资源
  • Laravel8.x + jwt 授权系统

    1 创先一个新项目 composer create project prefer dist laravel laravel my app 2 配置好数据库后迁移数据 php artisan migrate 3 让我们为 User 模型创建一
  • configParse 是如何解析配置文件的,下面解析配置文件的步骤,并用具体示例说明

    1 创建文件test ini以及存放内容 2 我的是python3 需要安装 pip install ConfigParser 3 创建ConfigParser对象 4 在上面的代码allow no value参数表示在配置文件中是否允许选
  • EFK6.3+kafka+logstash日志分析平台集群

    转载来源 EFK6 3 kafka logstash日志分析平台集群 https www jianshu com p f956ebbb2499 架构解读 第一层 数据采集层 安装filebeat做日志采集 同时把采集的日志发送给kafka
  • JS中的块级作用域

    JS中是没有块级作用域作用域这个概念 为实现块级作用域可通过闭包的形式实现 下面通过一个例子来说一下JS中的块级作用域 function outputName count for var i 0 i
  • 大数据电商数据仓库系统搭建(CDH数仓) 附离线安装包

    一 Cloudera Manager 概述 1 CM 简介 Cloudera Manager是一个拥有集群自动化安装 中心化管理 集群监控 报警功能的一个工具 使得安装集群从几天的时间缩短在几个小时内 运维人员从数十人降低到几人以内 极大的
  • Qt在Windows上简单调用opencv摄像头Demo

    OpenCV也和Qt一样 有很多版本 有各种平台版本 Android ios Windows Linux等 同样在Windows上 也分vc10 vc11 vc12版 做一个简单的demo 用Qt调用opencv摄像头接口显示当前摄像头画面
  • STM32 Keil中关于stlink的调试 下载设置

    1 首先找到魔法棒 或者右键项目 选择第一个Options of 2 找到Debug 选择stlink下载 点击setting 3 选择模式为SW模式 点击确定 进入下一步 4 点击Utilities选项卡 先取消use debug dri
  • 线性同余法生成随机数Matlab_生成安全的随机数

    0x01 生产随机数的方式 Math random 0到1之间随机数 java util Random伪随机数 线性同余法生成 java security SecureRandom真随机数 java util concurrent Thre