RSA加密解密算法认识及signln_resolve

2024-08-28 21:44

本文主要是介绍RSA加密解密算法认识及signln_resolve,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RSA初步了解

一、首先认识rsa是一种非对称加密算法。

对称加密:加密解密使用同一个密钥,加密者接受信息采用密钥加密,而到破译者手中还是使用这份密钥。这种方式的优点是加密效率高、加解密速度快,但是缺点是密钥需要共享,如果密钥被泄漏,则加密无效。

非对称加密:加密解密使用不同的密钥,加密使用的是公钥,解密使用的是私钥,因为公钥可以公开,所以只有私钥知道的加密信息能够被解密,这种方式的优点是安全性高,缺点是相对于对称加密而言,加密速度较慢。

二、RSA所需元素

一对质数p,q

公共模数N = p * q

欧拉函数φ(N) = (p-1) * (q-1) = L

公钥e条件:

1 < e < L

gcd(e,L) = 1

私钥d条件:

1 < d < L

(e * d) mod L = 1

gcd(a,b):取a和b的最大公约数

mod:取余运算。 例:10 mod 3 = 1(也可写成(e * d) % L = 1)

三、加解密过程

四、已知e求d及m明文方法(一般是由e推出d)

求私钥和明文一般利用python的gmpy2库函数进行计算。

私钥d = gmpy2.invert(e,L)

明文m(plaintext) = gmpy2.powmod(ciphertext,d,N)

求flag一般利用python的binascii库函数进行计算。

flag = binascii.unhexlify(hex(m)[2:]).decode("utf-8") 

说明:
1.invert函数用于计算模反。模反是指对于给定的整数a和模数m,找到一个整数b,使得(a*b)mod m = 1。
2.powmod(a,b,c)用于计算a的b次幂取余c的结果,对应ciphertext的d次方取余N。(上图解密)
3.binascii库在 Python 中用于在二进制数据和ASCII字符串之间进行转换,unhexlify用于将十六进制表示的数据转换为其对应的字节对象,hex(m)将明文转为16进制,[2:]切片是将0x去除,最后decode()将字节数据转换为字符串数据以utf-8形式。
补充:e与L的最大公约数为1(互质),在所有e的可取值中取最小的数(特点)。

signln——reserve

64位无壳,ida打开。

红框几个数字较可疑。

__gmpz_init_set_str(a,b,c):取b的c进制数存储到a中。

__gmpz_powm(a,b,c,d):b的c幂次方取余d存储到a中。

__gmpz_cmp(a,b):比较a和b是否相等,相等返回0,否则为1。

由以上函数及数据特性可以推测:

混杂字母和数字的为密文,全是数字最长的为共模数N,最小的65537为公钥e。

N利用网站可以得出p,q。

网址:http://www.factordb.com/index.php?query=103461035900816914121390101299049044413950405173712170434161686539878160984549

脚本如下:欢迎各位师傅指正!

import gmpy2
import binasciiN = 103461035900816914121390101299049044413950405173712170434161686539878160984549
ciphertext = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
#16进制加上0x
e = 65537p = 282164587459512124844245113950593348271
q = 366669102002966856876605669837014229419
L = (p-1)*(q-1)
#print(L)
D = gmpy2.invert(e,L)plaintext = gmpy2.powmod(ciphertext,D,N)
flag = binascii.unhexlify(hex(plaintext)[2:]).decode("utf-8")print(flag) #flag{Pwn_@_hundred_years}

这篇关于RSA加密解密算法认识及signln_resolve的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115968

相关文章

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各