rsa 加密 密文压缩_RSA公钥文件解密密文的原理分析

本文详细介绍了RSA加密算法的原理,包括公钥与私钥的生成,以及如何从PEM格式的公钥文件中提取模数和指数。通过实例展示了如何使用Python对RSA公钥进行解密,以及加密过程,强调了解密时需要先对密文进行因数分解获取私钥。
摘要由CSDN通过智能技术生成

前言

最近在学习RSA加解密过程中遇到一个这样的难题:假设已知publickey公钥文件和加密后的密文flag,如何对其密文进行解密,转换成明文~~

分析

对于rsa算法的公钥与私钥的产生,我们可以了解到以下产生原理:

公钥与私钥的产生

随机选择两个不同大质数 $p$ 和 $q$,计算 $N = p \times q$

根据欧拉函数,求得 $r=\varphi (N)=\varphi (p)\varphi (q)=(p-1)(q-1)$

选择一个小于 $r$ 的整数 $e$,使 $e$ 和 $r$ 互质。并求得 $e$ 关于 $r$ 的模反元素,命名为 $d$,有 $ed\equiv 1 \pmod r$

将 $p$ 和 $q$ 的记录销毁

此时,$(N,e)$ 是公钥,$(N,d)$ 是私钥。

消息加密

首先需要将消息 $m$ 以一个双方约定好的格式转化为一个小于 $N$,且与 $N$ 互质的整数 $n$。如果消息太长,可以将消息分为几段,这也就是我们所说的块加密,后对于每一部分利用如下公式加密:

$$ n^{e}\equiv c\pmod N $$

消息解密

利用密钥 $d$ 进行解密。

$$ c^{d}\equiv n\pmod N $$

我们可以知道,RSA公钥主要有两个信息:模数(modulus)和指数(exponent),也就是我们所说的N和e。只要有了这两个信息,我们便可以生成公钥,然后使用rsa库对数据进行加密~

脚本实现如下:

#!/usr/bin/env python#-*- coding: utf-8 -*-

importrsa

key=rsa.PublicKey(modulus, exponent)print key

这时候我们有如下的publickey.pem文件:

-----BEGIN PUBLIC KEY-----MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMJjauXD2OQ/+5erCQKPGqxsC/bNPXDr

yigb/+l/vjDdAgMBAAE=

-----END PUBLIC KEY-----

现在我们需要做的就是从这段字符串中提出模数和指数。

首先我们得知道pem文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值