在众多的加密算法中都需要进行幂的取模运算,比如在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实现算法导论中反复平方法模取幂相关推荐

  1. Java实现算法导论中Miller-Rabin随机性素数测试

    Miller-Rabin测试: 费马小定理:对于素数p和任意整数a,有ap ≡ a(mod p)(同余).反过来,满足ap ≡ a(mod p),p也几乎一定是素数. 伪素数:如果n是一个正整数,如果 ...

  2. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  3. Java实现算法导论中Rabin-Karp字符串匹配算法

    Rabin-Karp算法的思想: 假设子串的长度为M,目标字符串的长度为N 计算子串的hash值 计算目标字符串中每个长度为M的子串的hash值(共需要计算N-M+1次) 比较hash值 如果hash ...

  4. Java实现算法导论中朴素字符串匹配算法

    朴素字符串匹配算法沿着主串滑动子串来循环匹配,算法时间性能是O((n-m+1)m),n是主串长度,m是字串长度,结合算法导论中来理解,具体代码参考: package cn.ansj;public cl ...

  5. Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)

    基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解.具体要结合算法导论中的有关数论算法章节理解,具体代码如下: package cn.ansj;/*假设方程ax=b(mod n)有解,且x0是方 ...

  6. Java实现算法导论中快速傅里叶变换FFT递归算法

    要结合算法导论理解,参考:http://blog.csdn.net/fjssharpsword/article/details/53281889 代码中算法思路:输入n位(2的幂)向量,分别求值FFT ...

  7. Java实现算法导论中有限自动机字符串匹配算法

    这里实现了基于有限自动机(Finite Automaton,FA)的模式匹配算法,算法的重点在于利用字符串的前后缀构造模式P的自动机,具体结合导论中的说明来理解,可参考http://www.geeks ...

  8. Java实现算法导论中Pollard的rho启发式方法

    Pollard的rho启发式方法用于启发式求解大整数n分解因子,具体要结合导论中来理解,参考代码如下: package cn.ansj;import java.math.BigInteger; imp ...

  9. Java实现算法导论中快速傅里叶变换FFT迭代算法

    要结合算法导论理解,参考:http://blog.csdn.NET/fjssharpsword/article/details/53281889 FFT的迭代实现,可以实现并行电路,和比较网络中的比较 ...

最新文章

  1. postman测试上传文件
  2. python 数据库订阅_发布/订阅数据库和客户端编程数据库有什么区别?
  3. 【转】ASP.NET中“字母和数字混合的验证码”详解
  4. Nautilus-Open-Terminal : 可随处打开终端的 Nautilus 插件
  5. Objective-c——UI基础开发第十二天(相册展示)
  6. 运维人员应该掌握哪些常用技术
  7. 108. Leetcode 188. 买卖股票的最佳时机 IV (动态规划-股票交易)
  8. 【转载】RPA如何自动化SAP系统?
  9. iso22000食品安全管理体系_食品安全管理体系ISO22000:2018澄清了两个层次PDCA的区别,具体怎么样的...
  10. 图片居中裁剪_魔镜,魔镜,谁最美丽!利用PS图层混合模式打造图片幻觉效果
  11. IDEA怎么导入一个maven项目
  12. 《Photoshop Lightroom4 经典教程》目录—导读
  13. 第一次修U盘,没想到...
  14. 十个值得学习的c开源项目(嵌入式)
  15. JustSoSo复现
  16. CompletableFuture学习
  17. M2DGR:多源多场景 地面机器人SLAM数据集(ICRA 2022 )
  18. go time包定时器和断续器
  19. 【参赛作品12】基于华为云鲲鹏弹性云服务器部署openGauss数据库-实验
  20. Pulmonary--Detection2

热门文章

  1. 如何在柱状图中点连线_练瑜伽,如何放松僵硬紧张的髂腰肌?
  2. java web系统拆分_Java系统中如何拆分同步和异步
  3. 这是Nginx的负载均衡配置方法
  4. linux GDB详解
  5. spark面试总结1
  6. Le Chapitre VI
  7. 2017春季华为实习生编程题
  8. Kafka无消息丢失配置
  9. MySQL 5.6.26 通过frm ibd 恢复数据过程
  10. tomcat集群 (自带Cluster集群)