问题

方法BigInteger.isProbablePrime()很奇怪;从文档中,这将告诉数字是否为素数,概率为1 - 1 / 2^arg,其中arg是整数参数。

它已经存在于JDK很长一段时间了,所以它意味着它必须有用。我在计算机科学和算法(和数学)方面的有限知识告诉我,知道一个数字是否"可能"是一个素数而不是一个素数并不是真的有意义。

那么,人们想要使用这种方法的可能情况是什么?密码?

#1 热门回答(66 赞)

是的,这种方法可用于密码学.RSA encryption包含大量素数的发现,有时大约为1024位(约300位)。 RSA的安全性取决于这样一个事实,即将由这些素数中的2个组成的数字相乘,这是非常困难和耗时的。但要使它发挥作用,它们必须是最重要的。

事实证明,证明这些数字也很难。但Miller-Rabin primality test,其中一个素数测试使用isProbablePrime,要么检测到数字是复合的还是没有给出结论。运行此测试n次允许你得出结论,在2个节点中有1个这个数字真的是复合的。运行it100次会产生2100的可接受风险,即这个数字是复合的。

#2 热门回答(20 赞)

如果测试告诉你一个整数不是素数,你当然可以相信100%。

这只是问题的另一面,如果测试告诉你整数是"可能的素数",你可能会怀疑。用不同的"基数"重复测试允许错误地成功地"模仿"素数(相对于多个碱基是强伪素数)的概率可以根据需要做得小。

测试的有用性在于它的速度和简单性。人们不一定会对"可能的素数"作为最终答案的状态感到满意,但是在引入素数测试的大枪之前,人们肯定会避免在几乎所有复合数字上浪费时间。

对整数分解难度的比较是一种红色的鲱鱼。众所周知,整数的素数可以在多项式时间内确定,实际上有证据证明米勒 - 拉宾检验扩展到足够多的基数是确定的(在检测质数时,与可能的素数相反),但这假设广义黎曼假设,所以它不太确定(更昂贵)AKS primality test。

#3 热门回答(18 赞)

用于BigInteger.isProbablePrime(int)的标准用例是密码学。具体而言,某些加密算法(如RSA)需要随机选择的大质数。然而,重要的是,这些算法并不真正要求这些数字被保证为素数 - 它们只需要以极高的概率进行素数处理。

有多高?好吧,在加密应用程序中,人们通常会调用.isProbablePrime(),其参数介于128和256之间。因此,通过这种测试的非素数的概率小于2128或2256中的一个。

让我们从视角来看:如果你有100亿台计算机,每台计算机每秒产生100亿个可能的素数(这意味着任何现代CPU上每个数字的时钟周期不到一个),并且这些数字的素数用.isProbablePrime(128)测试,你平均而言,预计一个非素数将在每1000亿年中出现****。

也就是说,如果那些100亿台计算机在不经历任何硬件故障的情况下以某种方式运行数千亿年,就会出现这种情况。但实际上,更有可能随机宇宙射线在恰当的时间和地点撞击你的计算机,将返回值of.isProbablePrime(128)从false翻转为true,而不会产生任何其他可检测的效果,而不是非-prime数字实际上在该确定性水平上通过概率素性测试。

当然,随机宇宙射线和其他硬件故障的相同风险也适用于确定性素性测试,如AKS。因此,在实践中,即使这些测试由于随机硬件故障而具有(非常小的)基线误报率(更不用说所有其他可能的错误源,例如实现错误)。

由于很容易将米勒 - 拉宾素性测试的内在假阳性率推迟到.isProbablePrime()远低于此基线速率,仅仅通过重复测试足够多次,并且因为,即使重复这么多次,米勒 - 拉宾测试仍然快得多实践比AKS这样最着名的确定性素性测试,它仍然是加密应用程序的标准素性测试。

(此外,即使你偶然选择强伪荧光作为RSA模量的因素之一,它通常也不会导致灾难性的失败。通常,这种假性质是大约两个(或很少)质数的产物。长度的一半,这意味着你最终得到amulti-prime RSA key。只要没有任何因素是小的(如果它们是,原始性测试应该抓住它们),RSA算法仍然可以正常工作,并且虽然键相对于某些类型的攻击比相同长度的普通RSA密钥稍微弱一些,但如果你没有不必要地缩短密钥长度,那么它仍然应该是合理安全的。)

java什么叫用例_BigInteger的.isProbablePrime()的可能用例是什么?相关推荐

  1. Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类

    Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...

  2. java static是单例_JAVA基础-static关键字及单例设计模式

    static关键字 基本概念使用static关键字修饰成员变量表示静态的含义, 此时成员变量由对象层级提升为类层级, 也就是整个类只有一份并被所有对象共享. 该成员变量随着类的加载准备就绪, 与是否创 ...

  3. 抽象单例:一种通用的单例

    背景 单例的一般写法,大家基本都会,这里特指具有以下特征的单例: 1.单例 2.需要延迟加载 3.线程安全 看一下这个类的写法(JAVA): public class A {private stati ...

  4. 【问题描述】3.1.5 用整数1~7依次表示星期一至星期日。由键盘输入一个整数,输出对应的英文表示,如果输入的整数在1~7之外,输出“Error”信息。【样例输入1】1【样例输出1】Monda

    [问题描述]3.1.5 用整数1~7依次表示星期一至星期日.由键盘输入一个整数,输出对应的英文表示,如果输入的整数在1~7之外,输出"Error"信息. [样例输入1]1 [样例输 ...

  5. fedora 33 topbar_31省区市新增确诊33例,天津新增本地确诊1例

    [31省区市新增确诊33例,天津新增本地确诊1例]11月8日0-24时,31个省(自治区.直辖市)和新疆生产建设兵团报告新增确诊病例33例,其中境外输入病例32例(上海13例,陕西6例,广东4例,四川 ...

  6. 手动标记用例状态_【自动化接口用例】从 1 到 1000 过程中的实践和思考

    谢谢打开这篇文章的每个你 关注我们 点击右上角 ··· 设为星标 当一个新人刚加入公司的时候,我们通常告诉新人怎么去写一个自动化用例:从工程配置到如何添加接口.如何使用断言,最后到如何将一个用例运行起 ...

  7. 客服跟踪记录管理php,用例管理平台维护记录,用例管理平台维护_PHP教程

    用例管理平台维护记录,用例管理平台维护 工作需要维护一个用例管理平台,主要是对个别功能点进行优化.此平台保存各项目各时期的测试用例,以及用例查询.管理.评审等功能. 首先在本地搭建模拟线上环境.xam ...

  8. OO系统分析员之路--用例分析系列(2)--用例的类型与粒度 [整理重发]

    在正式讨论如何获取用例之前,笔者觉得有两个问题还是先解释清楚为好,这对正确获取用例有很大帮助.这两个问题也是初学者最为困惑,也是最难掌握的.一个是各种用例类型之间的区别和用法,另一个是用例的粒度.  ...

  9. OO系统分析员之路--用例分析系列(2)--用例的类型与粒度

    OO系统分析员之路--用例分析系列(2)--用例的类型与粒度 在正式讨论如何获取用例之前,笔者觉得有两个问题还是先解释清楚为好,这对正确获取用例有很大帮助.这两个问题也是初学者最为困惑,也是最难掌握的 ...

最新文章

  1. origin图上显示数据标签_【数据绘图】好图分享:寒假?不存在的!
  2. od 追踪_裁判员行为规范【基本功】——追踪裁判违例宣判练习 /五秒违例
  3. SQLServer之创建数据库架构
  4. 语言 班费管理系统源代码_固定资产管理系统开源的各种语言翻译
  5. Cookie / Session 的机制与安全
  6. set_bit() 等位函数分析! \linux-1.0\linux\include\asm\bitops.h
  7. php在线考试系统模板下载,PHPEMS在线模拟考试系统 v6.1
  8. python怎么输入一个数字并调用_Python3 实例(一)
  9. 真的已经讲烂了!java字符串转对象
  10. docker gogs安装
  11. [JarvisOj][XMAN]lTell Me Something
  12. hive中的TextFile转为SequenceFile
  13. 使用Python将微信和支付宝账单导入随手记
  14. vs2015智能提示英文改为中文
  15. ExtJS 前端 日期数据格式转化
  16. 【计划表合集】学习计划表/时间表/打卡表/理财表/读书记录/生活计划表等合集
  17. iOS逆向开发,突破微信强制升级,让低版本的iPhone也能正常使用
  18. Android 一共有多少种动画?准确告诉你!
  19. 【RF预测】基于matlab随机森林算法数据回归预测【含Matlab源码 2047期】
  20. 尚硅谷尚品汇_后台管理项目

热门文章

  1. matplotlib fontdict 字体设置
  2. 轻量级ORM框架 Bankinate
  3. Python学习:Mysql(二)
  4. maven更换阿里云源
  5. [osx] android studio下修改avd的hosts文件
  6. Java语法基础----课后实践作业
  7. 转:百度手机地图网络性能优化实践
  8. Github访问慢的问题
  9. AI 高等数学、概率论基础
  10. Matlab中diag函数注意事项