URAL 1141. RSA Attack RSA加密演算法
意甲冠军:给你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;
- }
版权声明:本文博客原创文章,博客,未经同意,不得转载。
URAL 1141. RSA Attack RSA加密演算法的更多相关文章
- 1141. RSA Attack(RSA)
1141 越来越喜欢数论了 很有意思 先看个RSA的介绍 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密. RSA的算法涉及三个参数,n ...
- 【Android工具】DES终结者加密时报——AES加密演算法
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...
- Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法
Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口 讲到了怎样调用内核中的接口的方法. 本节主要是介绍怎样Android C/C++应用程序调用Openssl ...
- ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)
1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- 非对称加密RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。使用最广泛的是RSA算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私 ...
- RSA加密解密算法
/** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...
- RSA非对称性前端加密后端解密
前端加密代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结
(1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...
随机推荐
- crm工作机会实体
using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; public class Opport ...
- MVC区域 vs2013 mvc 搭建基架项
http://www.it165.net/pro/html/201404/12822.html
- WPS2012交叉引用提示word比wps这种强烈的更新参考
WPS2012交叉引用技巧,word比wps这点强更新參考文献 到时生成仅仅有有一条线,好像WPS不能够,word能够,假设谁知道能够补充.^_^ 1.写论文,參考文献的改动非 ...
- 静态方法使用bean
java类中的代码 public class BidMsgUtil { private static Logger log = Logger.getLogger(BidMsgUtil.class); ...
- IntelliJ IDEA常见问题解决办法汇总
(1)SVN相关的操作: 启用:方法1:VCS菜单下Enable Version Control Integration,点击之后选择相应的版本控制工具方法2:Setting中Version Cont ...
- UVa 825 - Walking on the Safe Side
题目:在一个N*M的网格中,从左上角走到右下角,有一些点不能经过,求最短路的条数. 分析:dp,帕斯卡三角.每一个点最短的就是走N条向下,M条向右的路. 到达每一个点的路径条数为左边和上面的路径之和. ...
- Qt计算器开发(二):信号槽实现数学表达式合法性检查
表达式的合法性 由于我们的计算器不是单步计算的,所以我们能够一次性输入一个长表达式.然而假设用户输入的长表达式不合法的话,那么就会引发灾难.所以有必要对于用户的输入做一个限制. 一些限制举例: 比方, ...
- 【转】求质数算法的N种境界
原文地址:http://blog.csdn.net/program_think/article/details/7032600/ ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?& ...
- Android研究之手PullToRefresh(ListView GridView 下拉刷新)使用具体解释
群里一哥们今天聊天偶然提到这个git hub上的控件:pull-to-refresh ,有兴趣的看下,样例中的功能极其强大,支持非常多控件.本篇博客具体给大家介绍下ListView和GridVi ...
- 使用Intel HAXM 加速你的Android模拟器
Android 模拟器一直以运行速度慢著称, 本文介绍使用 Intel HAXM 技术为 Android 模拟器加速, 使模拟器运行度媲美真机, 彻底解决模拟器运行慢的问题. Intel HAXM ( ...