第五周心得与体会

第五周心得与体会

1.pycharm安装

先在[pycharm官网](PyCharm:JetBrains为专业开发者提供的Python IDE)首页下载最新版的pycharm,安装程序下载好后,双击打开,更改安装路径后,就可以等待安装成功了,安装好的程序如下图所示:请添加图片描述
请添加图片描述

2.pycharm中python的配置

双击打开刚才安装好的pycharm,点击新建项目

编辑文件目录和基础解释器选择提前下载好的python点击创建即可
请添加图片描述

3.在python中实现base64的加密和解密

首先在刚才新建的项目中选择新建文件,其次我们只需要调用python中内置的base64模块来进行 Base64 编码和解码,具体的编码如下图所示:

import base64

def base64_encode(data):
    # 使用 base64 编码
    encoded_bytes = base64.b64encode(data.encode('utf-8'))
    # 将字节数据转换为字符串
    encoded_string = encoded_bytes.decode('utf-8')
    return encoded_string

def base64_decode(encoded_string):
    # 将字符串转换为字节数据
    encoded_bytes = encoded_string.encode('utf-8')
    # 使用 base64 解码
    decoded_bytes = base64.b64decode(encoded_bytes)
    # 将字节数据转换为字符串
    decoded_string = decoded_bytes.decode('utf-8')
    return decoded_string

# 示例数据
original_data = "Hello, World!"

# 加密
encoded_data = base64_encode(original_data)
print("Base64 编码后:", encoded_data)

# 解密
decoded_data = base64_decode(encoded_data)
print("Base64 解码后:", decoded_data)

4.ctfshow crypto模块

4.1Pass-01

第一道签到题比较简单,可以看出它是倒序排列,直接简单转换即可得到flag{ctf.show}
请添加图片描述

4.2 Pass-02

题目中所呈现的是大量由{}[]+!四种符号组成的密文,可以判断出这是属于JSFuck类型的加密
在这里插入图片描述

我们可以将其全选复制后,打开火狐浏览器的控制台,将密文输入后,右键即可自动解析
在这里插入图片描述

4.3 Pass-03

题目中所呈现是大量的乱码和一两个颜文字,我们将文件下载到电脑桌面,选择用记事本打开,就可以看到没有乱码的由颜文字组成的密文,这是aaencode加密方式,其特征是将JS代码转换成常用的网络表情,例如(o_o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+
在这里插入图片描述
在这里插入图片描述

我们同样可以将其全选复制,打开火狐浏览器的控制台,将密文输入后,右键即可自动解析
在这里插入图片描述

4.4 Pass-04

题目中提供了三个数字p=447685307 q=2037 e=17,需要让我们求出d
在这里插入图片描述
根据其所提供的p q e我们可以联想到这是ras加密中的密钥生成的基本步骤:

  1. 选择两个大素数,记为p和q:

    • 随机选择两个大素数,例如,p = 61和q = 53。
  2. 计算n = pq,n是公共模数:

    • 计算n = 61 * 53,得到n = 3233。
  3. 计算欧拉函数φ(n) = (p-1)(q-1):

    • 计算φ(n) = (61-1)(53-1) = 60 * 52 = 3120。
  4. 选择一个整数e,1 < e < φ(n),且e与φ(n)互质。e将作为公钥的一部分:

    • 选择一个满足条件的整数e,例如,e = 17。这里要确保e与φ(n) = 3120互质。
  5. 计算整数d,使得ed ≡ 1 (mod φ(n))。d将作为私钥的一部分:

    • 计算d,满足17d ≡ 1 (mod 3120)。可以使用扩展欧几里得算法来找到d的值。在这个例子中,d = 2753

    我们可以使用python编写一个程序来进行计算:

    def extended_gcd(a, b):
        if a == 0:
            return (b, 0, 1)
        else:
            g, x, y = extended_gcd(b % a, a)
            return (g, y - (b // a) * x, x)
    
    def modinv(a, m):
        g, x, y = extended_gcd(a, m)
        if g != 1:
            raise Exception('Modular inverse does not exist')
        else:
            return x % m
    
    p = 447685307
    q = 2037
    e = 17
    
    n = p * q
    phi_n = (p - 1) * (q - 1)
    
    # 计算模反元素d
    d = modinv(e, phi_n)
    
    print("私钥 d =", d)
    
    

在这里插入图片描述

我们将代码运行后即可求得d

4.5 Pass-05

题目形式与第四题类似,给我们提供了p=447685307 q=2037 e=17 c=704796792四个数据,求m
在这里插入图片描述

我们可以联想到这是ras加密后续求解:

RSA算法中,加密明文用到公式:

c = m^e mod n

解疑: c是cipher,密文; m是message,明文; e是加密指数; n是公钥。

该变式在rsa算法中等价于:

c≡ m^e mod n

解疑: “≡”是同余符号,mod是求余数,在python中表示为%。 两个整数a,b,若它们除以整数m所得的余数相等, 则称a,b对于模m同余 记作 a ≡ b (mod m)

我们可以使用python编写一个程序:

def decrypt_rsa(c, d, n):
    # 使用 pow 函数进行模幂运算
    m = pow(c, d, n)
    return m

# 给定的参数
p = 447685307
q = 2037
e = 17
d = 53616899001
c = 704796792

# 计算模数 n
n = p * q

# 解密密文得到明文
m = decrypt_rsa(c, d, n)

print("解密后的明文 m:", m)

在这里插入图片描述

我们将代码输入pycharm后,即可求出m的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值