Java实现算法导论中反复平方法模取幂

153 篇文章 2 订阅
60 篇文章 48 订阅

在众多的加密算法中都需要进行幂的取模运算,比如在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;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值