Java实现算法导论中反复平方法模取幂
在众多的加密算法中都需要进行幂的取模运算,比如在RSA算法中需要计算d=ne mod N,我们称之为幂模算法,其中:
- N=p*q(p,q为大素数)
- n为加密数据,n<N
- e为公钥,d为私钥,满足关系ed≡1 (mod (p-1)*(q-1))
其中n,e都是非常大的数,ne mod N用算法导论中的反复平方法,具体代码如下:
package cn.ansj;public class ModulaExponentiation {public static void main(String args[]) { int a=7;int b=560;int n=561;int c=0;int d=1;//b表示成位二进制String bb=Integer.toBinaryString(b);System.out.println("b表示成二进制:"+bb); //for (int i=bb.length()-1;i>=0;i--){for (int i=0;i<bb.length();i++){c=2*c;d=(d*d)%n;if (bb.charAt(i)=='1'){c=c+1;d=(d*a)%n;}System.out.println("b"+(bb.length()-i-1)+"="+bb.charAt(i)+";"+"c="+c+";"+"d="+d+";");//打印迭代结果} /*char[] cb=bb.toCharArray();for (int i=cb.length-1;i>=0;i--){c=2*c;d=(d*d)%n;if (cb[i]=='1'){c=c+1;d=(d*a)%n;}System.out.println("b"+i+"="+cb[i]+";"+"c="+c+";"+"d="+d+";");//打印迭代结果} */ }
}
执行结果:
b表示成二进制:1000110000
b9=1;c=1;d=7;
b8=0;c=2;d=49;
b7=0;c=4;d=157;
b6=0;c=8;d=526;
b5=1;c=17;d=160;
b4=1;c=35;d=241;
b3=0;c=70;d=298;
b2=0;c=140;d=166;
b1=0;c=280;d=67;
b0=0;c=560;d=1;
Java实现算法导论中反复平方法模取幂相关推荐
- Java实现算法导论中Miller-Rabin随机性素数测试
Miller-Rabin测试: 费马小定理:对于素数p和任意整数a,有ap ≡ a(mod p)(同余).反过来,满足ap ≡ a(mod p),p也几乎一定是素数. 伪素数:如果n是一个正整数,如果 ...
- Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...
- Java实现算法导论中Rabin-Karp字符串匹配算法
Rabin-Karp算法的思想: 假设子串的长度为M,目标字符串的长度为N 计算子串的hash值 计算目标字符串中每个长度为M的子串的hash值(共需要计算N-M+1次) 比较hash值 如果hash ...
- Java实现算法导论中朴素字符串匹配算法
朴素字符串匹配算法沿着主串滑动子串来循环匹配,算法时间性能是O((n-m+1)m),n是主串长度,m是字串长度,结合算法导论中来理解,具体代码参考: package cn.ansj;public cl ...
- Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)
基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解.具体要结合算法导论中的有关数论算法章节理解,具体代码如下: package cn.ansj;/*假设方程ax=b(mod n)有解,且x0是方 ...
- Java实现算法导论中快速傅里叶变换FFT递归算法
要结合算法导论理解,参考:http://blog.csdn.net/fjssharpsword/article/details/53281889 代码中算法思路:输入n位(2的幂)向量,分别求值FFT ...
- Java实现算法导论中有限自动机字符串匹配算法
这里实现了基于有限自动机(Finite Automaton,FA)的模式匹配算法,算法的重点在于利用字符串的前后缀构造模式P的自动机,具体结合导论中的说明来理解,可参考http://www.geeks ...
- Java实现算法导论中Pollard的rho启发式方法
Pollard的rho启发式方法用于启发式求解大整数n分解因子,具体要结合导论中来理解,参考代码如下: package cn.ansj;import java.math.BigInteger; imp ...
- Java实现算法导论中快速傅里叶变换FFT迭代算法
要结合算法导论理解,参考:http://blog.csdn.NET/fjssharpsword/article/details/53281889 FFT的迭代实现,可以实现并行电路,和比较网络中的比较 ...
最新文章
- postman测试上传文件
- python 数据库订阅_发布/订阅数据库和客户端编程数据库有什么区别?
- 【转】ASP.NET中“字母和数字混合的验证码”详解
- Nautilus-Open-Terminal : 可随处打开终端的 Nautilus 插件
- Objective-c——UI基础开发第十二天(相册展示)
- 运维人员应该掌握哪些常用技术
- 108. Leetcode 188. 买卖股票的最佳时机 IV (动态规划-股票交易)
- 【转载】RPA如何自动化SAP系统?
- iso22000食品安全管理体系_食品安全管理体系ISO22000:2018澄清了两个层次PDCA的区别,具体怎么样的...
- 图片居中裁剪_魔镜,魔镜,谁最美丽!利用PS图层混合模式打造图片幻觉效果
- IDEA怎么导入一个maven项目
- 《Photoshop Lightroom4 经典教程》目录—导读
- 第一次修U盘,没想到...
- 十个值得学习的c开源项目(嵌入式)
- JustSoSo复现
- CompletableFuture学习
- M2DGR:多源多场景 地面机器人SLAM数据集(ICRA 2022 )
- go time包定时器和断续器
- 【参赛作品12】基于华为云鲲鹏弹性云服务器部署openGauss数据库-实验
- Pulmonary--Detection2