bzoj 4522: [Cqoi2016]密钥破解
4522: [Cqoi2016]密钥破解
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 818 Solved: 480
[Submit][Status][Discuss]
Description
1. 任选两个不同的质数 p ,q
2. 计算 N=pq , r=(p-1)(q-1)
3. 选取小于r ,且与 r 互质的整数 e
4. 计算整数 d ,使得 ed≡1 mod r
5. 二元组 (N,e) 称为公钥,二元组 (N,d) 称为私钥
当需要加密消息 n 时(假设 n 是一个小于 N 整数,因为任何格式的消息都可转为整数表示),使用公钥 (N,e),按照
n^e≡c mod N
运算,可得到密文 c 。
对密文 c 解密时,用私钥 (N,d) ,按照
c^d≡n mod N
运算,可得到原文 n 。算法正确性证明省略。
由于用公钥加密的密文仅能用对应的私钥解密,而不能用公钥解密,因此称为非对称加密算法。通常情况下,公钥由消息的接收方公开,而私钥由消息的接收方自己持有。这样任何发送消息的人都可以用公钥对消息加密,而只有消息的接收方自己能够解密消息。
现在,你的任务是寻找一种可行的方法来破解这种加密算法,即根据公钥破解出私钥,并据此解密密文。
Input
输入文件内容只有一行,为空格分隔的j个正整数e,N,c。N<=2^62,c<N
Output
输出文件内容只有一行,为空格分隔的k个整数d,n。
Sample Input
Sample Output
可以说是模拟题了
题目中第一句话:给出两个不同的质数p, q,计算N=p*q
N给你了,那么对N进行分解质因数后一定就是p*q的形式,大数分解用 Pollard_rho
之后算出r,又因为e*d=1modr,那么可以用 扩展欧几里得 算出d
最后快速幂一下,两个答案就出来了
#include<stdio.h>
#include<stdlib.h>
#define LL long long
int cnt;
LL fat[66], x1, y1;
LL Abs(LL a)
{if(a<0)a = -a;return a;
}
LL Mulit(LL a, LL b, LL mod)
{LL ans = 0;a %= mod;while(b){if(b%2)ans = (ans+a)%mod;a = a*2%mod;b /= 2;}return ans;
}
LL Pow(LL a, LL b, LL mod)
{LL ans = 1;while(b){if(b%2)ans = Mulit(ans, a, mod);a = Mulit(a, a, mod);b /= 2;}return ans;
}
LL Gcd(LL a, LL b)
{if(b==0)return a;return Gcd(b, a%b);
}
int Miller_Rabin(LL n)
{int i, j, k;LL a, x, y, mod;if(n==2) return 1;if(n<2 || n%2==0) return 0;mod = n-1, k = 0;while(mod%2==0){mod /= 2;k++;}for(i=1;i<=11;i++){a = rand()%(n-1)+1;x = Pow(a, mod, n);y = 0;for(j=1;j<=k;j++){y = Mulit(x, x, n);if(y==1 && x!=1 && x!=n-1)return 0;x = y;}if(y!=1)return 0;}return 1;
}
LL Divi(LL n)
{LL i, k, x, y, p, c;if(n==1)return 1;k = 2, p = 1;y = x = rand()%n, c = rand()%(n-1)+1;for(i=1;p==1;i++){x = (Mulit(x, x, n)+c)%n;p = Abs(x-y);p = Gcd(n, p);if(i==k)y = x, k *= 2;}return p;
}
void Pollard_rho(LL n)
{LL p;if(n==1)return;if(Miller_Rabin(n))fat[++cnt] = n;else{p = Divi(n);Pollard_rho(n/p);Pollard_rho(p);}
}
LL ExGcd(LL a, LL b)
{LL t, temp;if(b==0){x1 = 1, y1 = 0;return a;}t = ExGcd(b, a%b);temp = x1;x1 = y1;y1 = temp-a/b*y1;return t;
}
int main(void)
{LL e, n, c, r, d;scanf("%lld%lld%lld", &e, &n, &c);Pollard_rho(n);r = (fat[1]-1)*(fat[2]-1);d = ExGcd(e, r);d = (x1%r+r)%r;printf("%lld %lld\n", d, Pow(c, d, n));return 0;
}
bzoj 4522: [Cqoi2016]密钥破解相关推荐
- [Cqoi2016] 密钥破解 Java 题解
密钥破解 题目描述 一种非对称加密算法的密钥生成过程如下: 任选两个不同的质数 p ,q 计算 N=pq , r=(p-1)(q-1) 选取小于r ,且与 r 互质的整数 e 计算整数 d ,使得 e ...
- 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)...
4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 290 Solved: 148 [Submit][Stat ...
- JTR(John The Ripper)的ssh密钥破解记录
JTR破解ssh密钥,需要将密钥这种类型文件转换为JTR兼容的攻击文件. 所以,需要找到相关工具来转换,在网上搜到的相关工具为ssh2john,在/usr/sbin/目录下,但是我查看了我的对应路径, ...
- auto uninstaller 密钥 破解 修复卸载工具
auto uninstaller 修复卸载工具 密钥注册机破解分享 只可以用于8.8.38,亲测可用 zhAAxzm5Wmmhzomyxyhoahra6AXrzy6X## hzWh6maaa5hmah ...
- wifi密钥破解(WPA2/PSK)
0 这里本应该写一点关于WLAN协议的知识, 暂且略过 开启网卡监听模式 airmon-ng start wlan0 开启监听模式 捕获空气中的数据包 airodump-ng wlan0mon 捕获的 ...
- Synergy安装及生成密钥破解
目录 安装包和配置的请参考这篇链接: 破解synergypro1.8.8序列号 复制序列号到软件中进行激活 安装包和配置的请参考这篇链接: win10和Ubuntu16.04系统下synergypro ...
- VS2013密钥破解
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...
- Jzoj4458 密钥破解——Pollard-rho
此题非常新颖,有一个专门的算法,所以如果没有了解过,那么就只能写暴力卡了 这道题后面的几步都很简单,一个扩展gcd求逆元,一个快速幂,所以关键就是求r,而这需要对N=pq进行分解 本来这个问题在是一个 ...
- BZOJ 4522 Pollard-rho+exgcd
思路: N=P*Q 求出来P和Q 模拟就好- //By SiriusRen #include <cstdio> #include <algorithm> using names ...
最新文章
- 从C10K到C10M高性能网络的探索与实践
- 你应该如何选择笔记软件?
- constructor of OfflineInterface.js
- Jerry本地安装SAP Kyma的一些失败尝试
- CM3计算板读取SHT30以及I2C驱动
- 计算机主机箱拆箱,开箱 篇一:拆戴尔3681 SFF 10代小主机
- 浏览器兼容console对象的简要解决方案
- 递归处理二叉树总结(附leetcode题)
- 添加css单词换行连字符
- 基于Multisim的12小时制电子时钟仿真
- 【GIT】error: failed to push some refs to 'https://github.com/username/python.git'
- 是时候回答【我为什么要学习 Go 语言(golang)】这个问题了
- android开源轮播图框架,最好用的轮播插件框架都在这里了,Github流行轮播框架...
- 手写笔记图片计算机,如何将手写笔记录入到电脑上?
- 查看/data/data下的数据库文件
- AssertionError: WARNING: No labels found in ** Can not train without labels.
- 清华大学海洋大数据分析管理平台解读
- 区块链共识之Paxos算法理解与实战
- Python读写Excel数据(指定某行某列)
- 服务器主机只能读取一个硬盘,服务器pe不识别硬盘(无法读取硬盘原因和解决法)...