Java实现算法导论中反复平方法模取幂
生活随笔
收集整理的這篇文章主要介紹了
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实现算法导论中求解模线性方程解(
- 下一篇: Java实现算法导论中Miller-Ra