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

3 187 45

Sample Output

107 12

可以说是模拟题了

题目中第一句话:给出两个不同的质数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]密钥破解相关推荐

  1. [Cqoi2016] 密钥破解 Java 题解

    密钥破解 题目描述 一种非对称加密算法的密钥生成过程如下: 任选两个不同的质数 p ,q 计算 N=pq , r=(p-1)(q-1) 选取小于r ,且与 r 互质的整数 e 计算整数 d ,使得 e ...

  2. 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)...

    4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 290  Solved: 148 [Submit][Stat ...

  3. JTR(John The Ripper)的ssh密钥破解记录

    JTR破解ssh密钥,需要将密钥这种类型文件转换为JTR兼容的攻击文件. 所以,需要找到相关工具来转换,在网上搜到的相关工具为ssh2john,在/usr/sbin/目录下,但是我查看了我的对应路径, ...

  4. auto uninstaller 密钥 破解 修复卸载工具

    auto uninstaller 修复卸载工具 密钥注册机破解分享 只可以用于8.8.38,亲测可用 zhAAxzm5Wmmhzomyxyhoahra6AXrzy6X## hzWh6maaa5hmah ...

  5. wifi密钥破解(WPA2/PSK)

    0 这里本应该写一点关于WLAN协议的知识, 暂且略过 开启网卡监听模式 airmon-ng start wlan0 开启监听模式 捕获空气中的数据包 airodump-ng wlan0mon 捕获的 ...

  6. Synergy安装及生成密钥破解

    目录 安装包和配置的请参考这篇链接: 破解synergypro1.8.8序列号 复制序列号到软件中进行激活 安装包和配置的请参考这篇链接: win10和Ubuntu16.04系统下synergypro ...

  7. VS2013密钥破解

    Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...

  8. Jzoj4458 密钥破解——Pollard-rho

    此题非常新颖,有一个专门的算法,所以如果没有了解过,那么就只能写暴力卡了 这道题后面的几步都很简单,一个扩展gcd求逆元,一个快速幂,所以关键就是求r,而这需要对N=pq进行分解 本来这个问题在是一个 ...

  9. BZOJ 4522 Pollard-rho+exgcd

    思路: N=P*Q 求出来P和Q 模拟就好- //By SiriusRen #include <cstdio> #include <algorithm> using names ...

最新文章

  1. 从C10K到C10M高性能网络的探索与实践
  2. 你应该如何选择笔记软件?
  3. constructor of OfflineInterface.js
  4. Jerry本地安装SAP Kyma的一些失败尝试
  5. CM3计算板读取SHT30以及I2C驱动
  6. 计算机主机箱拆箱,开箱 篇一:拆戴尔3681 SFF 10代小主机
  7. 浏览器兼容console对象的简要解决方案
  8. 递归处理二叉树总结(附leetcode题)
  9. 添加css单词换行连字符
  10. 基于Multisim的12小时制电子时钟仿真
  11. 【GIT】error: failed to push some refs to 'https://github.com/username/python.git'
  12. 是时候回答【我为什么要学习 Go 语言(golang)】这个问题了
  13. android开源轮播图框架,最好用的轮播插件框架都在这里了,Github流行轮播框架...
  14. 手写笔记图片计算机,如何将手写笔记录入到电脑上?
  15. 查看/data/data下的数据库文件
  16. AssertionError: WARNING: No labels found in ** Can not train without labels.
  17. 清华大学海洋大数据分析管理平台解读
  18. 区块链共识之Paxos算法理解与实战
  19. Python读写Excel数据(指定某行某列)
  20. 服务器主机只能读取一个硬盘,服务器pe不识别硬盘(无法读取硬盘原因和解决法)...

热门文章

  1. 学python能做什么类型的工作-Python支持哪些数据类型
  2. 用python画皮卡丘-实现童年宝可梦,教你用Python画一只属于自己的皮卡丘
  3. python菜鸟教程100例-Python 练习实例1
  4. python发音1001python发音-1001种玩法 | Python 学习指南资源
  5. 手机网络游戏SDK集成指南
  6. 第H题 输入N求N的阶乘的10进制表示的长度
  7. 【最短路】Floyd算法:2020蓝桥最短路
  8. android7.0如何自定义添加系统服务
  9. 最简单的基于DirectShow的示例:视频播放器自定义版
  10. ffmpeg 从内存中读取数据(或将数据输出到内存)