标题来源: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

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. //返回a^p mod n 高速幂
  7. int pow_mod(int a, int p, int n)
  8. {
  9. int ans = 1;
  10. while(p)
  11. {
  12. if(p&1)
  13. {
  14. ans *= a;
  15. ans %= n;
  16. }
  17. a *= a;
  18. a %= n;
  19. p >>= 1;
  20. }
  21. return ans;
  22. }
  23. bool prime(int x)
  24. {
  25. for(int i = 2; i*i <= x; i++)
  26. {
  27. if(x%i == 0)
  28. return false;
  29. }
  30. return true;
  31. }
  32. int main()
  33. {
  34. int T;
  35. scanf("%d", &T);
  36. while(T--)
  37. {
  38. int e, n, c;
  39. scanf("%d %d %d", &e, &n, &c);
  40. int p, q;
  41. for(int i = 2; i*i <= n; i++)
  42. {
  43. if(n%i == 0 && prime(i) && prime(n/i))
  44. {
  45. p = i;
  46. q = n/i;
  47. break;
  48. }
  49. }
  50.  
  51. int x = (p-1)*(q-1), y = x;
  52. for(int i = 2; i*i <= n; i++)
  53. {
  54. if(x % i == 0)
  55. {
  56. y = y / i * (i-1);
  57. while(x % i == 0)
  58. x /= i;
  59. }
  60. }
  61. if(x > 1)
  62. y = y / x * (x-1);
  63. int inv = pow_mod(e, y-1, (p-1)*(q-1));
  64. printf("%d\n", pow_mod(c, inv, n));
  65. }
  66. return 0;
  67. }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

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

  1. 1141. RSA Attack(RSA)

    1141 越来越喜欢数论了 很有意思 先看个RSA的介绍 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密. RSA的算法涉及三个参数,n ...

  2. 【Android工具】DES终结者加密时报——AES加密演算法

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...

  3. Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法

    Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口 讲到了怎样调用内核中的接口的方法. 本节主要是介绍怎样Android C/C++应用程序调用Openssl ...

  4. ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)

    1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...

  5. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  6. 非对称加密RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。使用最广泛的是RSA算法

          非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私 ...

  7. RSA加密解密算法

    /** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...

  8. RSA非对称性前端加密后端解密

    前端加密代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...

  9. Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结

    (1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...

随机推荐

  1. crm工作机会实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages; public class Opport ...

  2. MVC区域 vs2013 mvc 搭建基架项

    http://www.it165.net/pro/html/201404/12822.html

  3. WPS2012交叉引用提示word比wps这种强烈的更新参考

                WPS2012交叉引用技巧,word比wps这点强更新參考文献 到时生成仅仅有有一条线,好像WPS不能够,word能够,假设谁知道能够补充.^_^ 1.写论文,參考文献的改动非 ...

  4. 静态方法使用bean

    java类中的代码 public class BidMsgUtil { private static Logger log = Logger.getLogger(BidMsgUtil.class); ...

  5. IntelliJ IDEA常见问题解决办法汇总

    (1)SVN相关的操作: 启用:方法1:VCS菜单下Enable Version Control Integration,点击之后选择相应的版本控制工具方法2:Setting中Version Cont ...

  6. UVa 825 - Walking on the Safe Side

    题目:在一个N*M的网格中,从左上角走到右下角,有一些点不能经过,求最短路的条数. 分析:dp,帕斯卡三角.每一个点最短的就是走N条向下,M条向右的路. 到达每一个点的路径条数为左边和上面的路径之和. ...

  7. Qt计算器开发(二):信号槽实现数学表达式合法性检查

    表达式的合法性 由于我们的计算器不是单步计算的,所以我们能够一次性输入一个长表达式.然而假设用户输入的长表达式不合法的话,那么就会引发灾难.所以有必要对于用户的输入做一个限制. 一些限制举例: 比方, ...

  8. 【转】求质数算法的N种境界

    原文地址:http://blog.csdn.net/program_think/article/details/7032600/ ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?& ...

  9. Android研究之手PullToRefresh(ListView GridView 下拉刷新)使用具体解释

     群里一哥们今天聊天偶然提到这个git hub上的控件:pull-to-refresh ,有兴趣的看下,样例中的功能极其强大,支持非常多控件.本篇博客具体给大家介绍下ListView和GridVi ...

  10. 使用Intel HAXM 加速你的Android模拟器

    Android 模拟器一直以运行速度慢著称, 本文介绍使用 Intel HAXM 技术为 Android 模拟器加速, 使模拟器运行度媲美真机, 彻底解决模拟器运行慢的问题. Intel HAXM ( ...