CTF_RSA解密学习
CTF_RSA解密学习
00X00 、先看了一边李永乐老师的视频
https://www.bilibili.com/video/av26639065/
00X01、对称、非对称算法了解
对称算法,加解密双方使用一个密钥。即加密秘钥和解密秘钥相同。
对称加密又分为:分组加密和流加密
常见的分组算法有:DES、3DES、DESX、Blowfish、IDEA、RC2、
RC5、RC6和AES,以及中国的SSF33、SM1、SM4。
分组加密又可以根据其迭代模式分为ECB,CBC,OFB,CFB,CTR。
非对称算法也叫公钥算法,在公钥密码系统中,加密和解密使用的是不同的密钥,这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。
这使得通信双方无需事先交换密钥就可进行保密通信。其中加密密钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者,这个加密密钥又称为公钥;
而收信者收到加密文件后,它可以使用他的解密密钥解密,这个密钥是由他自己私人掌管的,并不需要分发,因此又成称为私钥,这就解决了密钥分发的问题。
主要的公钥算法有: RSA、 DSA、 DH 和 ECC。

00X02、RSA简介
RSA 加密算法是一种非对称加密算法。在公开密钥加密和电子商业中 RSA 被广泛使用。RSA 是 1977 年由罗纳德 · 李维斯特(Ron Rivest)、阿迪 · 萨莫尔(Adi Shamir)和伦纳德 · 阿德曼(Leonard Adleman)一起提出的。RSA 就是他们三人姓氏开头字母拼在一起组成的。
RSA 算法的可靠性由极大整数因数分解的难度决定。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。如今,只有短的 RSA 密钥才可能被强力方式解破。到 2017 年为止,还没有任何可靠的攻击 RSA 算法的方式。
00x03、RSA算法原理
1、公钥与私钥的产生:
(1)进行加密之前,首先找出2个不同的大质数p和q
(2)计算n=p*q
(3)根据欧拉函数,求得φ(n)=φ§φ(q)=(p−1)(q−1)
(4)找出一个公钥e,e要满足: 1<e<φ(n) 的整数,且使e和φ(N)互质。
(5)根据e*d除以φ(n)余数为1,找到私钥d。
(6)所以,公钥就是(n,e) 私钥就是(n,d)
2、 消息加密:
m^e除以n求余数即为c(密文)

也就是说RSA加密是对明文的E次方后除以N后求余数的过程。
从通式可知,只要知道E和N任何人都可以进行RSA加密了,所以说E、N是RSA加密的密钥,也就是说E和N的组合就是公钥,我们用(E,N)来表示公钥
公钥=(E,N)公钥=(E,N)
3、 消息解密:
c^d除以n求余数即为m(明文)

也就是说对密文进行D次方后除以N的余数就是明文,这就是RSA解密过程。知道D和N就能进行解密密文了,所以D和N的组合就是私钥。
私钥=(D,N)私钥=(D,N)
4、如下
| 公钥 | (E,N) |
|---|---|
| 私钥 | (D,N) |
| 密钥对 | (E,D,N) |
| 加密 | 密文=明文EmodN密文=m^EmodN |
| 解密 | 明文=密文DmodN明文= c^DmodN |
5、小结
| 求N | N= p * q ;p,q为质数 |
|---|---|
| 求φ(n) | φ(n)=φ§φ(q)=(p−1)(q−1) |
| 求E | 找出一个公钥e,e要满足: 1<e<φ(n) 的整数,且使e和φ(N)互质。 |
| 求D | 根据e*d除以φ(n)余数为1,找到私钥d。 |
00x04、实践
1、求n
我们准备两个很小对质数,
p = 17
q = 19
n = p * q = 323
2、求φ(n)
φ(n)=φ§φ(q)=(17−1)(19−1)=144
3、求e
求E必须要满足2个条件:1 < e < L ,gcd(e,φ(n))=1
即1 < e < 144,gcd(e,144) = 1
e和144互为质数,5显然满足上述2个条件
故E = 5
4、求d
求D也必须满足2个条件:1 < d < φ(n),e*d mod φ(n)= 1
即1 < e < 144,5 * d mod 144 = 1
显然当d= 29 时满足上述两个条件
1 < 29 < 144
5*29 mod 144 = 145 mod 144 = 1
此时私钥=(d,n)=(29,323)
5、加密
准备的明文必须时小于N的数,因为加密或者解密都要mod N其结果必须小于N
假设明文 = 123
则 密文=明文EmodN
则 密文=明文EmodN=1235mod323=225密文=明文EmodN=1235mod323=225
q = 19
p = 17
e = 5
n = q * p
d = 29
m1=123
c1= pow(m1, e, n)
print(c1)
6、 解密
明文=密文DmodN=225^29mod323=123
解密后的明文为123。
# 解密
q = 19
p = 17
e = 5
n = q * p
d = 29
m1=123
c1= pow(m1, e, n)
print(c1)
c=225
#m=10# print(n)
m2= pow(c, d, n)
print(m2)
225
123
CTF_RSA解密学习的更多相关文章
- windows DPAPI加密解密学习
#include "stdafx.h" #include <windows.h> #include <Wincrypt.h> #include <io ...
- Spring cloud config配置文件加密解密
Spring cloud config配置文件加密解密 学习了:http://blog.csdn.net/u010475041/article/details/78110349 学习了:<Spr ...
- java加密解密的学习
注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)(加解密)
转自http://www.cppblog.com/ArthasLee/archive/2010/12/01/135186.html 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后 ...
- 深入学习Python解析并解密PDF文件内容的方法
前面学习了解析PDF文档,并写入文档的知识,那篇文章的名字为深入学习Python解析并读取PDF文件内容的方法. 链接如下:https://www.cnblogs.com/wj-1314/p/9429 ...
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
Visual Studio 2017中使用正则修改部分内容 最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...
- ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入、和使用、.js文件传输加解密
JSPatch ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入.和使用..js文件传输加解密 ios开发面临审核周期长,修复bug延迟等让人无奈的问题,所以 ...
- 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密
学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密 技术标签: RSA AES RSA AES 混合加密 整合 前言: 为了提高安全性采用了RS ...
- PHP的学习--RSA加密解密
PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了. 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了. 密码没加 ...
- 烂泥:gpg加解密软件学习
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 为什么要学习gpg呢?因为要在Linux下把一个邮箱的密码加密,不让其他人看到该邮箱真 ...
随机推荐
- 陶瓷电容(MLCC),你真的了解吗?
摘要:本文主要介绍陶瓷电容(MLCC)的结构.阻抗-频率特性.直流偏压特性.温度特性和关键参数. 一.物理结构 多层片式陶瓷电容器(Multi-layer Ceramic Capacitor,MLCC ...
- Luogu P5005 中国象棋 - 摆上马 / Luogu P8756 国际象棋 题解 [ 蓝 ] [ 状压 dp ] [ 位运算 ]
国际象棋:模板棋盘状压. 摆上马:需要点思维的棋盘状压,相比上一道题加了"蹩马脚"的设定. Easy_version :国际象棋 概述一下此类棋盘问题的思路: 用二进制数表示出棋盘 ...
- QT5笔记:34. 视口和窗口
 例子: void Widget::paintEvent(QP ...
- QT5笔记:12. 字符串和数值之间的转换
字符串与进制转换的例子 /** * @brief Widget::on_btnCalcHex_clicked 从界面上获取十六进制字符串,然后转为十进制和二进制字符串写回界面 */ void Widg ...
- nacos(七): gateway(单体)
这篇文章将从gateway的搭建.自动路由匹配.路由数组.跨域和路由过滤器五个方面对gateway项目展开讨论. 1.gateway的搭建 gateway的项目基本的搭建过程与消费者的搭建过程基本一致 ...
- Linux - top相关的快捷键
q:退出top命令窗口(quit). k:按照进程ID终止(kill)一个进程.例如,你可以输入k,然后输入进程的PID来终止它. r:重新设置进程的优先级.输入r后,你可以输入新的优先级值. f:进 ...
- 李沐动手学深度学习V2-chapter_linear-networks
李沐动手学深度学习V2 文章内容说明 本文主要是自己学习过程中的随手笔记,需要自取 课程参考B站:https://space.bilibili.com/1567748478?spm_id_from=3 ...
- composer 指定php版本
需要指定php和composer的位置,然后再去执行composer命令 ## 指定PHP版本 指定composer 指定载入包 /usr/local/php7/bin/php composer /u ...
- 【Linux】shell 脚本 (.sh) 编写及执行
shell脚本 shell脚本就是一些命令的集合 #!/bin/bash echo "文件开头代表:该文件使用的是bash语法" 一.运行.sh文件 方法一:当前文件执行.sh 文 ...
- WIN2012域用户添加和批量添加工具
WIN2012域用户添加和批量添加,不需要进行复杂的进电脑管理去添加 直接在软件上就可单个用户添加,可批量添加,并把指定的用户加入组 可以自定义组织单位,使用起来比较简单方便. 链接:https:// ...