题目描述:

解答出来了上一个题目的你现在可是春风得意,你们走向了下一个题目所处的地方 你一看这个题目傻眼了,这明明是一个数学题啊!!!可是你的数学并不好。扭头看向小鱼,小鱼哈哈一笑 ,让你在学校里面不好好听讲现在傻眼了吧~来我来!三下五除二,小鱼便把这个题目轻轻松松的搞定了。flag格式为cyberpeace{小写的你解出的答案}

附件内容:

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17

求解出d

前置知识:

非对称加密算法--RSA加密原理

————————————————————————

公钥密码算法(非堆成密钥算法):产生一对可以互逆变换的密钥Kd与Ke,但是即使知道Kd,还是无法得知Ke,这样就可将Kd公开,但只有接收方知道Ke。在此情况下,任何人均可利用Kd加密,而只有知道Ke的接收方才能解密;或是只有接收方一人才能加密(加密与解密其实都是一种动作),任何人均能解密。

简单地概述一下\(RSA\)算法加密/解密的过程:

import:

\(N\):公钥\(1\)   \(d\):公钥\(2\)   \(e\):私钥

\(A\):密文   \(B\):明文   \(φ()\):欧拉函数

  • 公钥在同一加密规则下对于所有人来说都是已知的,加密只需公钥

  • 首先约定私钥 \(e\,\)需满足:\(1 < e < φ(N)\) 且 \(gcd(e,N) = 1\) (互质,否则无解)

  • 公钥 \(d\) 由 \(d*e≡1\,(mod\,φ(N))\) ① 计算出,此时称 \(d\) 是 \(e\) 的模反元素

  • 为了增加破解(分解因数)的难度,\(N\) 一般为两个大质数的乘积(即 \(p\) 和 \(q\))

加密公式: \(A^d ≡ B\;(\;mod\;N\;)\,\,\)   解密公式: \(B^e ≡ A\;(\;mod\;N\;)\,\,\)

数字签名: \(A^e ≡ B\;(\;mod\;N\;)\,\,\)   验证签名: \(B^d ≡ A\;(\;mod\;N\;)\,\,\)

我们知道当 \(p\) 和 \(q\) 都为质数时,\(φ(N) = φ (p*q) = (p-1) * (q-1)\)

故 ① 式变为:\(d * e\,\%\,(p-1)*(q-1)\,= 1\)

即 \(d*e*x-(p-1)*(q-1)*y=1\) 其中: \(x,y∈N\)

easy_RSA 这道题就是模拟了计算公钥的过程,我们可以使用扩展欧几里得算法解决。

C++ 代码如下:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
void exgcd (ll a,ll b,ll &d,ll &y,ll &gcd) {
if (!b) { d=1,y=0,gcd=a; return; }
else { exgcd(b,a%b,y,d,gcd),y-=d*(a/b); }
}
int main()
{
const ll p=473398607161,q=4511491,e=17;
const ll eu=(p-1)*(q-1);
ll d,y,gcd,mo;
exgcd(e,eu,d,y,gcd);
mo=eu/gcd,d=(d%mo+mo)%mo;
cout<<d;
return 0;
}

adworld easy_RSA | RSA算法的更多相关文章

  1. 信息安全-5:RSA算法详解(已编程实现)[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6120389.html 背景介绍 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加 ...

  2. RSA算法原理

    一直以来对linux中的ssh认证.SSL.TLS这些安全认证似懂非懂的.看到阮一峰博客中对RSA算法的原理做了非常详细的解释,看完之后茅塞顿开,关于RSA的相关文章如下 RSA算法原理(一) RSA ...

  3. C#RSA算法实现+如何将公钥为XML格式转为PEM格式,给object-C使用

    .net中,处于安全的考虑,RSACryptoServiceProvider类,解密时只有同时拥有公钥和私钥才可以.原因是公钥是公开的,会被多人持有.这样的数据传输是不安全的.C#RSA私钥加密,公钥 ...

  4. [已解决] 快速理解RSA算法

    RSA算法基础详解 http://www.cnblogs.com/hykun/p/RSA.html RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/ ...

  5. 公钥私钥和RSA算法

    1, RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 2, RSA算法原理(二) http: ...

  6. 跨越千年的RSA算法

    转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...

  7. (转)RSA算法原理(二)

      作者: 阮一峰 日期: 2013年7月 4日 上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我们通过一个例子,来理解 ...

  8. (转) RSA算法原理(一)

    最近用到了RSA加密算法,虽然有现成的,但是想看看它的原理,翻到此文,感觉写得很好,通俗易懂,转了.   作者: 阮一峰 日期: 2013年6月27日 如果你问我,哪一种算法最重要? 我可能会回答&q ...

  9. springmvc使用RSA算法加密表单

    今天被吐槽在客户端用js对密码进行md5加密其实也不见得安全.这种做法其实不见得有什么作用,学过计算机网络都知道,在网上抓一个包是很简单的事,就算别人抓包抓不到你原始密码,用这个md5后的密码一样可以 ...

随机推荐

  1. SpringBoot学习(3) - jdbc

    数据库使用MySQL 5.7.18版本. 装配DataSource的步骤:1.加入数据库驱动 pom.xml: <project xmlns="http://maven.apache. ...

  2. 构建一个学生Student,根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

    定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号: sName表示姓名: sSex表示性别: sAge表示年龄: sJava:表示Java课程成 ...

  3. DotNetty发送请求的最佳实践

    长链接发送request/response时, 绝大部分包都是小包, 而每个小包都要消耗一个IP包, 成本大约是20-30us, 普通千兆网卡的pps大约是60Wpps, 所以想要提高长链接密集IO的 ...

  4. CCF_201312-4_有趣的数

    dp题,dp[i][j]代表i位数,j状态的数量.其中,j 的状态表示值有6种. 0 1 2     √ j = 0 3 01 02   √ j = 1 03 12 13 23   √ j = 2 0 ...

  5. nmcli几个常用命令

    1.nmcli connection 用于查看连接 2.nmcli device用于查看当前网络设备 3.nmcli connection modify用于修改当前连接配置 4.nmcli conne ...

  6. Ant Design Vue Pro 项目实战-项目初始化(一)

    写在前面 时间真快,转眼又是新的一年.随着前后端技术的不断更新迭代,尤其是前端,在目前前后端分离开发模式这样的一个大环境下,交互性.兼容性等传统的开发模式已经显得有些吃力.之前一直用的是react,随 ...

  7. 20191228--python学习第四天

    今日内容: 列表 元组 内容回顾与补充 1.计算机基础 硬件:CPU/内存/硬盘/主板/网卡 操作系统:linux(免费/开源) centos/ubuntu/redhat   windows   ma ...

  8. 一本彻底搞懂MySQL索引优化EXPLAIN百科全书

    1.MySQL逻辑架构 日常在CURD的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和SQL的编写,那如何让你编写的SQL语句性能更优呢? 先来整体看下MySQL逻辑架构图: M ...

  9. centos7 nginx 启动脚本

    [root@localhost ~]# vim /lib/systemd/system/nginx.service [Unit] Description=nginx After=network.tar ...

  10. 二进制、十六进制理解及int类型二进制存储方式

    二进制 0000 0000 0000 0000 0000 0000 0000 0001 // 2^0 0000 0000 0000 0000 0000 0000 0000 0010 // 2^1 00 ...