HDOJ-1211-RSA 解题报告
2015-04-09 15:23
363 查看
同余方程或快速幂水题。题意:RSA加密算法是这样的,
1.选择两个大素数p和q
2.计算n = p × q,F(n) = (p - 1) × (q - 1)
3.选择一个整数e(1 < e < F(n)),令gcd(e, F(n)) = 1,e 就是公钥
4.计算一个整数d,使得d × e = 1 (mod F(n)),d 就是密钥
加密用这个方法
C = E(m) = m^e mod n
解密用这个方法
M = D(c) = c^d mod n
现在给你p,q,e,l以及接下来l个c,c是密文,求输出明文。
解题思路:可以通过加密方法求明文也可以通过解密方法求明文,通过加密方法求明文的话就是找一个ASCII值m使得m^e mod n = c就行了,使用快速幂,解密方法的话就是要找到一个d使得c^d mod n的结果是在ASCII值范围内,要用同余方程。这里用的是加密方法求明文。
算出n后直接枚举ASCII值使得m^e mod n = c然后输出m代表的字符就行了。
解题代码:
1.选择两个大素数p和q
2.计算n = p × q,F(n) = (p - 1) × (q - 1)
3.选择一个整数e(1 < e < F(n)),令gcd(e, F(n)) = 1,e 就是公钥
4.计算一个整数d,使得d × e = 1 (mod F(n)),d 就是密钥
加密用这个方法
C = E(m) = m^e mod n
解密用这个方法
M = D(c) = c^d mod n
现在给你p,q,e,l以及接下来l个c,c是密文,求输出明文。
解题思路:可以通过加密方法求明文也可以通过解密方法求明文,通过加密方法求明文的话就是找一个ASCII值m使得m^e mod n = c就行了,使用快速幂,解密方法的话就是要找到一个d使得c^d mod n的结果是在ASCII值范围内,要用同余方程。这里用的是加密方法求明文。
算出n后直接枚举ASCII值使得m^e mod n = c然后输出m代表的字符就行了。
解题代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <math.h> #include <limits.h> #include <queue> #include <algorithm> #include <vector> #include <map> using namespace std; typedef long long LL; LL p, q, n, e, l, c; LL FastPow(LL base, LL n, LL mod); int main() { while (~scanf("%lld %lld %lld %lld", &p, &q, &e, &l)) { n = p * q; for (LL i=0; i<l; ++i) { scanf("%lld", &c); for (LL i=0; i<256; ++i) { if (FastPow(i, e, n) == c) { printf("%c", (int)i); break; } } } puts(""); } return 0; } LL FastPow(LL base, LL n, LL mod) { LL res = 1; base %= mod; while (n) { if (n & 1) { res *= base; res %= mod; } base *= base; base %= mod; n >>= 1; } return res; }
相关文章推荐
- hdoj1008解题报告
- hdoj2001解题报告
- hdoj-1008-Elevator(解题报告)
- HDOJ1010 解题报告
- hdoj2003解题报告
- hdoj-2098-分拆素数和(解题报告)
- hdoj2012解题报告
- 杭电HDOJ 1000 解题报告
- 最小生成树——HDOJ 1863 畅通工程 解题报告
- hdoj 1153 解题报告
- 解题报告-HDOJ-1162(最小生成树——Prim)
- HDOJ_1480 钥匙计数之二 解题报告(解密版)
- HDOJ3715-Go Deeper二分+2-sat解题报告
- 解题报告-HDOJ-1874(单源最短路径——Dijkstra)
- HDOJ 4006The kth great number 解题报告
- HDOJ-1827-Summer Holiday 解题报告
- HDOJ 1058:Humble Numbers 寻找丑数问题 解题报告
- HDOJ-1875-畅通工程再续 解题报告
- HDOJ 1032 The 3n + 1 problem解题报告
- hdoj 2045 不容易系列之(3)—— LELE的RPG难题 解题报告(简单递推)