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解密学习的更多相关文章

  1. windows DPAPI加密解密学习

    #include "stdafx.h" #include <windows.h> #include <Wincrypt.h> #include <io ...

  2. Spring cloud config配置文件加密解密

    Spring cloud config配置文件加密解密 学习了:http://blog.csdn.net/u010475041/article/details/78110349 学习了:<Spr ...

  3. java加密解密的学习

    注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...

  4. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)(加解密)

    转自http://www.cppblog.com/ArthasLee/archive/2010/12/01/135186.html 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后 ...

  5. 深入学习Python解析并解密PDF文件内容的方法

    前面学习了解析PDF文档,并写入文档的知识,那篇文章的名字为深入学习Python解析并读取PDF文件内容的方法. 链接如下:https://www.cnblogs.com/wj-1314/p/9429 ...

  6. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

  7. ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入、和使用、.js文件传输加解密

    JSPatch ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入.和使用..js文件传输加解密 ios开发面临审核周期长,修复bug延迟等让人无奈的问题,所以 ...

  8. 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密

      学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密 技术标签: RSA  AES  RSA AES  混合加密  整合   前言:   为了提高安全性采用了RS ...

  9. PHP的学习--RSA加密解密

    PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了. 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了. 密码没加 ...

  10. 烂泥:gpg加解密软件学习

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 为什么要学习gpg呢?因为要在Linux下把一个邮箱的密码加密,不让其他人看到该邮箱真 ...

随机推荐

  1. 陶瓷电容(MLCC),你真的了解吗?

    摘要:本文主要介绍陶瓷电容(MLCC)的结构.阻抗-频率特性.直流偏压特性.温度特性和关键参数. 一.物理结构 多层片式陶瓷电容器(Multi-layer Ceramic Capacitor,MLCC ...

  2. Luogu P5005 中国象棋 - 摆上马 / Luogu P8756 国际象棋 题解 [ 蓝 ] [ 状压 dp ] [ 位运算 ]

    国际象棋:模板棋盘状压. 摆上马:需要点思维的棋盘状压,相比上一道题加了"蹩马脚"的设定. Easy_version :国际象棋 概述一下此类棋盘问题的思路: 用二进制数表示出棋盘 ...

  3. QT5笔记:34. 视口和窗口

    ![image-20220504160327597](QT5 使用.assets/image-20220504160327597.png) 例子: void Widget::paintEvent(QP ...

  4. QT5笔记:12. 字符串和数值之间的转换

    字符串与进制转换的例子 /** * @brief Widget::on_btnCalcHex_clicked 从界面上获取十六进制字符串,然后转为十进制和二进制字符串写回界面 */ void Widg ...

  5. nacos(七): gateway(单体)

    这篇文章将从gateway的搭建.自动路由匹配.路由数组.跨域和路由过滤器五个方面对gateway项目展开讨论. 1.gateway的搭建 gateway的项目基本的搭建过程与消费者的搭建过程基本一致 ...

  6. Linux - top相关的快捷键

    q:退出top命令窗口(quit). k:按照进程ID终止(kill)一个进程.例如,你可以输入k,然后输入进程的PID来终止它. r:重新设置进程的优先级.输入r后,你可以输入新的优先级值. f:进 ...

  7. 李沐动手学深度学习V2-chapter_linear-networks

    李沐动手学深度学习V2 文章内容说明 本文主要是自己学习过程中的随手笔记,需要自取 课程参考B站:https://space.bilibili.com/1567748478?spm_id_from=3 ...

  8. composer 指定php版本

    需要指定php和composer的位置,然后再去执行composer命令 ## 指定PHP版本 指定composer 指定载入包 /usr/local/php7/bin/php composer /u ...

  9. 【Linux】shell 脚本 (.sh) 编写及执行

    shell脚本 shell脚本就是一些命令的集合 #!/bin/bash echo "文件开头代表:该文件使用的是bash语法" 一.运行.sh文件 方法一:当前文件执行.sh 文 ...

  10. WIN2012域用户添加和批量添加工具

    WIN2012域用户添加和批量添加,不需要进行复杂的进电脑管理去添加 直接在软件上就可单个用户添加,可批量添加,并把指定的用户加入组 可以自定义组织单位,使用起来比较简单方便. 链接:https:// ...