杭电1211

21 篇文章 0 订阅

题目描述:

RSA is one of the most powerful methods to encrypt data. The RSA algorithm is described as follow:

> choose two large prime integer p, q
> calculate n = p × q, calculate F(n) = (p - 1) × (q - 1)
> choose an integer e(1 < e < F(n)), making gcd(e, F(n)) = 1, e will be the public key
> calculate d, making d × e mod F(n) = 1 mod F(n), and d will be the private key

You can encrypt data with this method :

C = E(m) = m e mod n

When you want to decrypt data, use this method :

M = D(c) = c d mod n

Here, c is an integer ASCII value of a letter of cryptograph and m is an integer ASCII value of a letter of plain text.

Now given p, q, e and some cryptograph, your task is to "translate" the cryptograph into plain text.

RSA加密解密算法,p,q在32位以内,所以n在64位以内(C#用long,C/C++用__int64),注意不用超出数据类型的范围即可,AC代码:

using System;

namespace a1
{
	class Program
	{
		public static void Main(string[] args)
		{
			string str = string.Empty;
			while((str = Console.ReadLine())!=null){
				int p,q,e,l,d;
				string[] s=str.Split(' ');
				p=Convert.ToInt32(s[0]);
				q=Convert.ToInt32(s[1]);
				e=Convert.ToInt32(s[2]);
				l=Convert.ToInt32(s[3]);
				str=Console.ReadLine();
				string[] s1=str.Split(' ');
				int[] a=new int[l];
				for(int i=0;i<l;i++)
					a[i]=Convert.ToInt32(s1[i]);
				long n,fn;
				n=(long)p*(long)q;
				fn=(long)(p-1)*(long)(q-1);
				for(int i=1;;i++)
					if((fn*i+1)%e==0){d=(int)(fn*i+1)/e;break;}
				for(int i=0;i<l;i++){
					long k=1;
					for(int j=0;j<d;j++){
						k=k*a[i]%n;
					}
					Console.Write((char)k);
				}
				Console.WriteLine();
			}
		}
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值