java中大素数生成算法

目前的公开密钥 算法大部分基于大整数分解、有限域上的离散对数问题和椭 圆曲线上的离散对数问题,这些数学难题的构建大部分都需 要生成一种超大的素数,尤其在经典的RSA算法中,生成的素数的质量对系统的安全性有很大的影响。

1.原理

费马小定理:假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
基于此可以快速判断一个大整数是否为素数。

Miller-Rabin算法:Fermat算法的一个变形改进。
在这里插入图片描述

2. BigInteger中的API

public static BigInteger probablePrime(int bitLength, Random rnd)

结果是素数的概率为1-2^(-100),貌似内部使用了Miller-Rabin算法。
先不论这个概率问题,生成100个2048位的素数耗时141475ms
调用DHCryptUtils.randomPrime(2048)10次的时间已经达到了143614ms。
再来看这个概率问题,1-2^(-100)已经很接近于1。
如果还想提高这个概率,可以调用

public boolean isProbablePrime(int certainty)

certainty表示判断的准确率为1-2^(-certainty)

            Random r = new Random();BigInteger bigInteger = BigInteger.probablePrime(2048, r);while(!bigInteger.isProbablePrime(256)){bigInteger = BigInteger.probablePrime(2048, r);}

3. DH的KeyPairGenerator如何生成P和Q

一步一步进断点之后,发现了DSAParameterGenerator中的方法generatePandQ
certainty的取值和生成素数的长度有关系

       byte var11 = -1;if (var1 <= 1024) {var11 = 80;} else if (var1 == 2048) {var11 = 112;}

我这里需要的2048位,因此certainty为112。

内部生成素数的方法:

            BigInteger var14 = null;while(true) {BigInteger var13;BigInteger var16;do {var0.nextBytes(var9);var14 = new BigInteger(1, var9);var16 = (new BigInteger(1, var5.digest(var9))).mod(TWO.pow(var2 - 1));var13 = TWO.pow(var2 - 1).add(var16).add(ONE).subtract(var16.mod(TWO));} while(!var13.isProbablePrime(var11));var16 = ONE;for(int var15 = 0; var15 < 4 * var1; ++var15) {BigInteger[] var17 = new BigInteger[var7 + 1];BigInteger var19;BigInteger var20;for(int var18 = 0; var18 <= var7; ++var18) {var19 = BigInteger.valueOf((long)var18);var20 = var14.add(var16).add(var19).mod(var10);byte[] var21 = var5.digest(toByteArray(var20));var17[var18] = new BigInteger(1, var21);}BigInteger var24 = var17[0];for(int var25 = 1; var25 < var7; ++var25) {var24 = var24.add(var17[var25].multiply(TWO.pow(var25 * var6)));}var24 = var24.add(var17[var7].mod(TWO.pow(var8)).multiply(TWO.pow(var7 * var6)));var19 = TWO.pow(var1 - 1);var20 = var24.add(var19);BigInteger var26 = var20.mod(var13.multiply(TWO));BigInteger var12 = var20.subtract(var26.subtract(ONE));if (var12.compareTo(var19) > -1 && var12.isProbablePrime(var11)) {BigInteger[] var22 = new BigInteger[]{var12, var13, var14, BigInteger.valueOf((long)var15)};return var22;}var16 = var16.add(BigInteger.valueOf((long)var7)).add(ONE);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/57666.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决js中大数的问题

大数的理解: 就是由于数字太大了,然后js解析不了,不认识. 就比如实际生活中,在双11的时候,我们知道淘宝一夜之间总购买量肯定是一个很大很大的金额,当我们前端碰到一个非常大的数字的时候,js可能会解析不了. JS中的安全数字: > Number.MAX_SAFE_INTEGER 可以查看js中的…

CSP 201903-1 小中大

题目链接&#xff1a; 计算机软件能力认证考试系统http://118.190.20.162/view.page?gpidT89 【分析】主要学一下java的四舍五入&#xff0c;String,format("%.f", double&#xff09;&#xff1b; import java.util.Arrays; import java.util.Scanner;public cla…

CSP:小中大

试题编号&#xff1a;201903-1 试题名称&#xff1a;小中大 时间限制&#xff1a;1.0s 内存限制&#xff1a;512.0MB 思路&#xff1a;题目很简单&#xff0c;依次输出最大值&#xff0c;中位数&#xff0c;最小值。输出中位数的时候很神奇的出错。。。费了好半天事才改对。…

ccf小中大

试题编号&#xff1a;201903-1试题名称&#xff1a;小中大时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 思路很简单&#xff0c;但是有很多细节要考虑 如果中位数是小数&#xff0c;则要四舍五入&#xff0c;保留一位小数 否则直接输出整…

Spring中大事务拆分方案

Spring中大事务拆分方案 模块设计的时序图 启动流程 激活事件 完成事件 长事务造成的影响 由于现在事件的完成及后续激活都在一个事务中&#xff0c;比如完成融资申请事件之后会去激活批次启动签约&#xff0c;前置协议&#xff0c;资质认证等事件&#xff0c;这些操作…

AI 将完全取代前端开发吗?

注&#xff1a;今晨&#xff0c;我浏览 Medium&#xff0c;看到了篇颇为标题党的文章&#xff0c;于是我就将它抛给了 ChatGPT。本篇文章全部由 ChatGPT 所写。同时&#xff0c;我也请 ChatGPT 分享了它对此的观点。 最近&#xff0c;我的同事向我讲述了他与他老板的一次谈话。…

全网多种方法解决未连接到互联网 代理服务器出现问题,或者地址有误的错误

文章目录 1. 复现错误2. 分析错误3. 解决错误4. 解决该错误的其他方法5. 补充说明 1. 复现错误 今天&#xff0c;单位的实习生准备下载公司的代码&#xff0c;由于公司的代码放在gitlab上&#xff0c;需要内网才能登录gitlab。 而登陆内网需借助Hillstone Secure Connect&…

【实战篇】37 # 如何使用 QCharts 图表库绘制常用数据图表?

说明 【跟月影学可视化】学习笔记。 QCharts 图表库 QCharts 是一个基于 spritejs 封装的图表库&#xff0c;可以让用户以组件的形式组合出各种图表&#xff1a;https://www.qcharts.cn/#/home QCharts 图表的基本用法 最简单的方式是&#xff0c;直接通过 CDN&#xff0c;…

2021年微软研究博士奖研金名单出炉!三位华人博士生入选,每人42000美元

点击上方“CVer”&#xff0c;选择加"星标"置顶 重磅干货&#xff0c;第一时间送达 本文转载自&#xff1a;AI科技评论 作者 | 陈大鑫 就在今日&#xff0c;微软研究院宣布了2021年微软研究博士奖研金获奖名单&#xff01; 今年一共有十位在读博士生荣获此殊荣&…

新加坡管理大学何盛烽团队招收计算机视觉、图像生成方向全奖博士生

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—> CV 微信技术交流群 博士申请 | 新加坡管理大学&#xff08;SMU&#xff09;何盛烽副教授招收计算机视觉、图像生成方向全奖博士生 新加坡管理大学 新加坡管理大学&#xff0…

【硕博士推荐】国内有哪些不错的CV(计算机视觉)团队?

来源&#xff1a;深度学习技术前沿 编辑: Evans 转载请注明来源&#xff01; 【导读】计算机视觉是当前人工智能领域的超级热门&#xff0c;本文为大家总结了当前国内比较优秀的计算机视觉团队信息&#xff0c;希望能在大家申请硕士或者博士的过程中&#xff0c;提供一些参考信…

加州大学UC Santa Cruz CSE系助理教授招收多名AI方向全奖博士生及暑期实习生

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 作者&#xff1a;Yuyin Zhou | 源&#xff1a;知乎 https://zhuanlan.zhihu.com/p/437891533 加州大学UC Santa Cruz计算机科学与工程系 (UC Santa Cruz CSE) 周郁音博士招收人工智能方向…

剑桥CS博士推荐,毕业前要掌握的 9 个工具

无论你在创业还是在做学术研究&#xff0c;这些工具都将使你的技能更上一层楼。 学术界在推进技术方面发挥了巨大作用&#xff0c;但学术界和工业界往往存在一种分割状态。我们经常会看到这种现象&#xff1a;无数很棒的辅助工具在学术界被忽视&#xff0c;但在工业界很受欢迎…

科研工作专用ChatGPT

最近&#xff0c;一位开发者在 GitHub 上开源了一个「科研工作专用 ChatGPT」项目&#xff0c;让众多科研工作者大受好评。这个项目能够一键完成论文润色、语法检查、中英互译、代码解释等任务&#xff0c;非常方便实用。 自从 ChatGPT 诞生以来&#xff0c;越来越多的科研工作…

微软数据科学家助理(Data Scientist Associate)认证考试通过经验分享(DP-100)

今天冒着大疫情&#xff0c;去海淀的test center参加考试&#xff0c;通过了微软DP-100 在 Azure 上设计和实现数据科学解决方案&#xff0c;并且获得了经 Microsoft 认证&#xff1a;Azure 数据科学家助理 的证书。 经 Microsoft 认证&#xff1a;Azure 数据科学家助理 考试结…

新加坡管理大学何盛烽团队招收计算机视觉方向公派/访问博士生

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>CV微信技术交流群 新加坡管理大学 新加坡管理大学&#xff08;Singapore Management University&#xff09;&#xff0c;简称新大 &#xff08;SMU&#xff09;&#xff0c;…

美国CS PhD Research Scientist找工作经验总结

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 作者&#xff1a;刘壮 | 已授权转载&#xff08;源&#xff1a;知乎&#xff09;编辑&#xff1a;CVer https://zhuanlan.zhihu.com/p/537028803 过去小半年的时间主要就在找工作和决定去…

美国佐治亚大学卢国玉老师组招收计算机视觉方向全奖博士生

佐治亚大学 University of Georgia在2022 USNews美国大学排名排48名&#xff0c;全美最佳公立大学排第15&#xff0c;是公立常青藤大学之一。学校坐落在距离亚特兰大一小时车程的Athens&#xff0c;气候宜人&#xff0c;非常安全。亚特兰大机场是美国最大的机场&#xff0c;交通…

新加坡国立大学Robby T. Tan教授招收计算机视觉方向博士生

来源&#xff1a;AI求职 新加坡国立大学 新加坡国立大学&#xff08;National University of Singapore)&#xff0c;简称国大&#xff08;NUS&#xff09;&#xff0c;是亚洲顶尖、国际知名的研究型大学&#xff08;2022 年&#xff0c;泰晤士高等教育世界大学排名为世界第 21…

计算机名校远程在职硕士信息汇总Online Master

许多在职的程序员一方面希望拿一个名校学历&#xff0c;一方面觉得辞去工作去读书成本太高&#xff0c;此时他们会选择去读一个在线硕士online master。本文梳理了英美名校提供的在线硕士项目&#xff0c;比如加州大学伯克利&#xff0c;帝国理工&#xff0c;佐治亚理工&#x…