RSA算法描述:

78 篇文章 4 订阅
		/**
		 * 算法描述:
		 * (1)选择一对不同的、足够大的素数p,q。
		 * (2)计算n=pq。
		 * (3)计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
		 * (4)找一个与f(n)互质的数e,且1<e<f(n)。
		 * (5)计算d,使得de≡1 mod f(n)。这个公式也可以表达为d ≡e-1 mod f(n)
		 *     这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,
		 *     也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的
		 *     结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d
		 *     的值,让这个同余等式能够成立。
		 * (6)公钥KU=(e,n),私钥KR=(d,n)。
		 * (7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,
		 *     然后再进行交换。
		 * 
		 * 		知道 p=13、q=59、当e=13时,计算出d
		 * 
		 * 		注意:这里的秘钥e、d之间的关系
		 */
package 其他;

import java.util.ArrayList;

public class B {
	public static void main(String[] args) {
		double p,q,d,e,n,Fn;
		ArrayList<Integer> list=new ArrayList<>();
		e=13;
		p=43;q=59;
		n=p*q;
		Fn=(p-1)*(q-1);
		System.out.println("  p:"+p);
		System.out.println("  q:"+q);
		System.out.println("  n=p*q="+n);
		System.out.println("  Fn=(p-1)*(q-1)="+Fn);
		System.out.println("==================================================");
		for(int i=(int)n+1;i<100+n;i++) {
			if(i*e>n) {
				System.out.print(i+"对n(2537)取余等于:"+i%n+";   ");
				System.out.println(i+"除以e(13)等于:"+(int)i/e+"   余:"+i%e);
				if(i%e==0) {
					double v= i/e;
					list.add((int)v);
				}
			}
		}
		System.out.println(" ");
		System.out.println("=====================================");
		System.out.println(" ");
		System.out.print("当d*e的取值范围在区间"+(n+1)+"到"+(n+100)+"中时,d的可能取值为:");
		for(int i=0;i<list.size();i++) {
			System.out.print(list.get(i)+" ");
		}
		System.out.println( );
		System.out.println("=====================================");
		System.out.println(" ");
		System.out.println("故,在此区间,公钥及私钥可以有:");
		for(int i=0;i<list.size();i++) {
			System.out.print("("+(int)e+","+(int)n+"),"+"("+list.get(i)+","+(int)n+");");
			if(i!=0&&i%3==0) {
				System.out.println();
			}
			
		}
		System.out.println(" ");
		System.out.println(" ");
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值