URAL 1141. RSA Attack RSA加密算法

题目来源:URAL 1141. RSA Attack

题意:给你e n c 并且有m^e = c(mod n) 求 m

思路:首先学习RSA算法 here

过程大致是

1.发送的信息是m

2.随机选择两个质数 p和q, n = q*p, n的欧拉函数值φ(n)= (p-1)*(q-1)这个需要证明

3.选择一个与φ(n)互质的并且小于φ(n)的数e, 计算c = m^e(mod n)

4.发送c

5解密 求e的逆元d 逆元就是2个数乘一下在mod一个数等于1 这里就是e*d = 1(mod φ(n))

求逆元用扩展欧几里德或者直接求快速幂

6.计算c^d(mod n) 就是m

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

//返回a^p mod n 快速幂
int pow_mod(int a, int p, int n)
{
	int ans = 1;
	while(p)
	{
		if(p&1)
		{
			ans *= a;
			ans %= n;
		}
		a *= a;
		a %= n;
		p >>= 1;
	}
	return ans;
}
bool prime(int x)
{
	for(int i = 2; i*i <= x; i++)
	{
		if(x%i == 0)
			return false;
	}
	return true;
}
int main()
{
	int T;
	scanf("%d", &T);
	while(T--)
	{
		int e, n, c;
		scanf("%d %d %d", &e, &n, &c);
		int p, q;
		for(int i = 2; i*i <= n; i++)
		{
			if(n%i == 0 && prime(i) && prime(n/i))
			{
				p = i;
				q = n/i;
				break;
			}
		}

		int x = (p-1)*(q-1), y = x;
		for(int i = 2; i*i <= n; i++)
		{
			if(x % i == 0)
			{
				y = y / i * (i-1);
				while(x % i == 0)
					x /= i;
			}
		}
		if(x > 1)
			y = y / x * (x-1);
		int inv = pow_mod(e, y-1, (p-1)*(q-1));
		printf("%d\n", pow_mod(c, inv, n));
	}
	return 0;
}
时间: 2024-07-31 14:51:04

URAL 1141. RSA Attack RSA加密算法的相关文章

URAL 1141. RSA Attack(欧拉定理+扩展欧几里得+快速幂模)

题目链接 题意 : 给你n,e,c,并且知道me ≡ c (mod n),而且n = p*q,pq都为素数. 思路 : 这道题的确与题目名字很相符,是个RSA算法,目前地球上最重要的加密算法.RSA算法原理 . 看到这个算法之后,就知道这个题是求cd≡m(mod n),要求m,就要先求d,而d则是e的模反元素. 如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1.这时,b就叫做a的模反元素. 由模反元素可知,ed≡1(mod Phi[n])(p

浅析DES、AES、RSA、MD5加密算法及其应用场景

对称加密算法DES 算法:一种典型的块加密方法,将固定长度的明文通过一系列复杂的操作变成同样长度的密文,块的长度为64位.同时,DES 使用的密钥来自定义变换过程,因此算法认为只有持有加密所用的密钥的用户才能解密密文. DES 的密钥表面上是64位的,实际有效密钥长度为56位,其余8位可以用于奇偶校验. DES 现在已经不被视为一种安全的加密算法,主要原因是它使用的56位密钥过短.为了提供实用所需的安全性,可以使用 DES 的派生算法 3DES 来进行加密 AES 算法:在密码学中又称 Rijn

URAL 1557 Network Attack 图论,连通性,tarjain,dfs建树,分类讨论 难度:2

http://acm.timus.ru/problem.aspx?space=1&num=1557 1557. Network Attack Time limit: 2.0 secondMemory limit: 64 MB In some computer company, Mouse Inc., there is very complicated network structure. There are a lot of branches in different countries, so

非对称加密算法之RSA介绍及OpenSSL中RSA常用函数使用举例

RSA算法,在1977年由Ron Rivest.Adi Shamirh和LenAdleman,在美国的麻省理工学院开发完成.这个算法的名字,来源于三位开发者的名字.RSA已经成为公钥数据加密标准. RSA属于公开密钥密码体制.公开密钥体制就是产生两把密钥,一把用于加密,一把用于解密,而且不能根据算法和其中的一把密钥,而去推出另外的一把密钥.在使用的时候,将公钥公开,对方用公开的公钥加密数据后,将密文发回,然后用另一把私钥进行解密,从而还原出明文. RSA算法的数学基础是数论中的素数相关性质.RS

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c

【C#公共帮助类】给大家分享一些加密算法 (DES、HashCode、RSA、AES等)

AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.AES先进加密算法是一向被认为牢不可破的加密算法,针对这项加密算法的攻击是异常复杂的,事实上想要完全破解AES花费的时间要以数十亿年计,极大的保证了数据的安全性. 这里有两个加密.解密方法: 一种是带密钥的加密:一种是动态加密,就是不需要密钥,密钥被动态生成

openssl 非对称加密算法RSA命令详解

1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很难推算出私人密钥 根据非对称加密算法的特点,可用户数字签名.密钥交换.数据加密.但是由于非对称加密算法较对称加密算法加密速度慢很多,故最常用的用途是数字签名和密钥交换. 目前常用的非对称加密算法有RSA, DH和DSA三种,但并非都可以用于密钥交换和数字签名.而是RSA可用于数字签名和密钥交换,DH

RSA 公钥加密算法

RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的. 这个算法的名字也是他们三个人名字首字母,RSA算法基于一个十分简单的数论事实: 将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥. package rsa; import java.math.BigInteger; public class RSA { private long p,q,e,d,n; public RSA(

浅谈RSA加密算法

一.什么是非对称加密 1.加密的密钥与加密的密钥不相同,这样的加密算法称之为非对称加密 2.密钥分为:公钥,私钥  公钥:可以对外给任何人的加密和解密的密码,是公开的 私钥:通过私钥可以生成公钥,但从公钥被认为无法生成公钥(被推导出的概率小到不考虑) 3.当将要加密的内容用公钥加密的时候,只能用私钥来解密 当将要加密的内容用私钥加密的时候,只能用公钥来解密 4.公钥与私钥的关系,利用一个简单的公式来生成公钥和私钥,即非对称加密的公钥和私钥之间存在某一个公式关系 5.常见的非对称加密算法 RSA,