RSA介绍

根据加密原理,可以将大部分的加密算法分为两大类:对称加密算法和非对称加密算法。对称加密算法的加密和解密采用的是同一套算法规则。而非对称加密算法加密时用的是公钥(公开给所有人),解密时用的是私钥(只有相关人员拥有),

非对称加密算法中使用最广泛的就是RSA算法。RSA算法非常可靠,密钥越长,就越难破解。当今互联网中已经纰漏的破解方法是针对768位密钥。所以一般认为1024位的密钥加密是安全的,2048位是绝对安全的

RSA算法原理

RSA的算法是基于一个大因数是很难计算分解这一原理的。要想理解RSA原理需要了解一些基础的数论概念

素数

素数又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数

互质数

公因数只有1的两个数,叫做互质数

两个不同的质数一定是互质数。例如,2与7、13与19。一个质数,另一个不为它的倍数,这两个数为互质数。例如,3与10、5与 26。相邻的两个自然数是互质数。如 15与 16。相邻的两个奇数是互质数。如 49与 51。较大数是质数的两个数是互质数。如97与88。小数是质数,大数不是小数的倍数的两个数是互质数。例如 7和 16。2和任何奇数是互质数。例如2和87。1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。辗转相除法。

 指数运算

指数运算又称乘方计算,计算结果称为幂

模运算

模运算即求余运算。“模”是“Mod”的音译。和模运算紧密相关的一个概念是“同余”。数学上,当两个整数除以同一个正整数,若得相同余数,则二整数同余。

RSA加密步骤

1. 随机选择两个不相等的质数p和q(这里选择了61和53。(实际应用中,这两个质数越大,就越难破解。))

2. 获取p和q的乘积n, n = 61×53 = 3233

3. 获取n的欧根函数φ(n) = (p-1)(q-1),φ(3233)等于60×52,即3120

4. 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。则在1到3120之间,随机选择了17

5. 计算e对于φ(n)的模反元素d,ed ≡ 1 (mod φ(n)),17x+3120y=1,算出一组整数解为 (x,y)=(2753,-15),即 d=2753

6. 将n和e封装成公钥,n和d封装成私钥。在例子中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)

加密消息

  假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c:

  ne ≡ c (mod N)

计算c并不复杂。Bob算出c后就可以将它传递给Alice。

解密消息

Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:

  cd ≡ n (mod N)

得到n后,她可以将原来的信息m重新复原。

回顾上面的密钥生成步骤,一共出现了六个数字

两个质数p和q, 乘积n, n的欧根函数φ(n), 随机质数e, 和模反元素d

以上六个数字中,公开的是n和e。其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏

这样的话要想破解RSA有三个途径

1. ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。2. φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。3. n=pq。只有将n因数分解,才能算出p和q

RSA CTF一:VeryeasyRSA

已知RSA公钥生成参数:

p = 3487583947589437589237958723892346254777

q = 8767867843568934765983476584376578389

e = 65537

求d =

请提交PCTF{d}

1   按照RSA的加密流程,先算出n的值 n= p*q = 3487583947589437589237958723892346254777*8767867843568934765983476584376578389=3487583947589437589237958723892346254777*8767867843568934765983476584376578389

2  求φ(n)的值 φ(n)=(q-1)*(q-1)=(3487583947589437589237958723892346254777-1)*(8767867843568934765983476584376578389-1)=30578675145816634962204467309994126952472217172016094210686211003345383381088

3   计算d的值 根据ed ≡ 1 (mod φ(n)),转化公式65537d+30578675145816634962204467309994126952472217172016094210686211003345383381088y=1

def egcd(a, b):if a == 0:return (b, 0, 1)else:g, y, x = egcd(b % a, a)return (g, x - (b // a) * y, y)

def modinv(a, m):g, x, y = egcd(a, m)if g != 1:raise Exception('modular inverse   does not exist')else:return x % m
#d=modinv(e,(p-1)*(q-1))
d = modinv(17, (61-1)*(53-1))
print d

获得d的值

19178568796155560423675975774142829153827883709027717723363077606260717434369

转载于:https://www.cnblogs.com/ye-ming/p/8036420.html

CTF加密题型解析:RSA算法的CTF解法之一相关推荐

  1. java处理加密文件---实现RSA算法

    1  RSA算法的原理如下: 1.1原理      假设我们需要将信息从机器A传到机器B,首先由机器B随机确定一个Key,我们称之为密匙private_key,将这个可KEY始终保存在机器B中而不发出 ...

  2. 第十九篇:JAVA加密解密之RSA算法

    RSA算法简介 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年首 ...

  3. RSA算法以及所涉及的数论定理的简单证明

    理解RSA算法需要了解的数论定理全家桶 前言 "≡\equiv≡"符号的使用和模运算的规律简述 RSA算法 RSA算法的加密解密过程 RSA算法的加密解密实例 RSA算法的证明 欧 ...

  4. RSA算法总结(数学知识/CTF题型)

    一.RSA简介 简要概括就两句话:公钥(e)加密,私钥(d)解密. 二.RSA过程 三.RSA各参数 p 和 q:两个大的质数,是另一个参数N的的两个因子. N/n:大整数,可以称之为模数. e 和 ...

  5. CTF学习笔记一——RSA加密

    RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,"由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制. 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息, ...

  6. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  7. 数据传输加密——非对称加密算法RSA+对称算法AES(适用于java,android和Web)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明出处:http://blog.csdn.net/chay_chan/article/details/58605605 数据 ...

  8. JS逆向之美团网模拟登录h5Fingerprint、password(RSA)加密参数解析

    文章目录 前言 一.页面分析 二.加密解析 1.password解析 加密定位 参数解密 2.h5Fingerprint解析 加密定位 参数解密 3.python调用模拟请求 总结 前言 最近和几位大 ...

  9. RSA算法加解密过程全解析

    不同于传统的对称加密算法体系,非对称公私钥密码系统中的加密密钥和解密密钥是相互分开的,加密密钥用于公开给别人加密,而只有持有解密密钥的人才能对信息进行解密.1976年诞生过不少非对称密码算法,但是RS ...

  10. 国内首本CTF赛事技术解析书籍,五年之约,兑现了

    新书速递 每一个CTF战队的发展其实都面临着一个问题,那就是"如何传承".作为一个联合战队,随着老成员走向工作岗位,如何用良好的机制实现新老更替,是战队管理者需要认真考虑的问题.我 ...

最新文章

  1. SAP MM 初阶循环盘点的ABCD 标识符
  2. Python协程:从yield/send到async/await
  3. Netty专题-(3)NIO网络编程
  4. powershell 入门_使用PowerShell入门的5个Cmdlet
  5. 使用python获取焦点窗口的进程名称
  6. java 字段构造函数_依赖注入–字段vs构造函数vs方法
  7. 【软件开发底层知识修炼】六 Binutils辅助工具之- addr2line与strip工具
  8. 《Python核心编程》第二版第18页第一章练习 -Python核心编程答案-自己做的-
  9. 华为Mate 40 Pro屏幕贴膜曝光:双孔曲面屏实锤?
  10. linux-5.12-rc1-dontuse
  11. 大牛养成指南(3):天天写业务代码,如何成为技术大牛?
  12. Java String子序列
  13. 搭建fabric-sample/balance-transfer网络详解
  14. java版b2b2c社交电商spring cloud分布式微服务(八)springboot整合mongodb
  15. 品高打造西科大教育云,带你看懂高教云建设之路
  16. Bitbucket 触发内网 Jenkins Build
  17. PHP连接MySQL查询结果中文显示乱码问题
  18. html主题标签是什么意思,HTML5所有标签汇总及标签意义解释
  19. 用matlab求二重积分
  20. 企业IT资产年终盘点实录——踩过的坑如月球表面

热门文章

  1. CleanShot X for mac(支持标注的截图录屏工具)
  2. rcmd–App Switcher for Mac快速切换应用程序
  3. 红米Redmi品牌独立后首发新品 雷军:『友商就不要用性价比这个词了』...
  4. 使用 Hapi 开发 RESTful APIs
  5. schedule与scheduleAtFixedRate之Timer源码分析
  6. 引用类型-Function类型
  7. 拿到一份陌生数据我们应该怎么办
  8. 删除CentOS系统自带的jdk
  9. avrdude: stk500_getsync(): not in sync: resp=0x00
  10. 强制 Google.com 域名使用 HTTPS(SSL)