ctfshow CRYPTO 1-5

第一题:

我们可以看见一串代码 }wohs.ftc{galf   可以看出倒序排列后就出现flag了,所以这里出现了密码的第一种类型:倒序.十分简单所以密码就是  flag{ctf.show}

第二题:

可见,密码在文件中,下载后打开,如下:

看见,密文由6种符号 (、)、+、[、]、!,  可以简单判断为,jsfuck编码,我们只需要将其转换回JavaScript编码就可以看懂了.因为编码后的JSFuck代码在运行时会被解码为原始的JavaScript代码,并产生相同的结果。这意味着,无论是原始代码还是经过JSFuck编码的代码,它们在执行时将产生相同的输出、产生相同的副作用或实现相同的功能,由于浏览器控制台,可以直接运行JavaScript代码,所以,在浏览器控制台复制粘贴加回车就输出了flag

flag{3e858ccd79287cfe8509f15a71b4c45d},密码类型总结:密文是jsfuck进行编码,以六种符号: (、)、+、[、]、! 构成.

第三题:

打开文件:

可以发现密文中有许多乱码与颜文字,我们可以大胆想象,这玩意的乱码只是因为单纯的浏览器的问题,于是我们将其另存为.txt格式文件,打开,发现:

全变为颜文字了

因为,AAencode编码的密文多含字符与数字,而其也是基于JavaScript ,文本编辑技术,所以我们将颜文字导入控制台,回车:密码出来了:flag{js_da_fa_hao}. 

 密文总结:包含多数字符和数字,基于JavaScript开发,可以由浏览器控制台输出,获得隐藏的代码.

第四题: 

题中出现p,q,e,d等关键字母,且p,q为素数,可以合理怀疑这是RSA加密算法 

什么是RSA?

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于加密通信、数字签名和密钥交换等领域。下面我将详细解释 RSA 加密算法以及它的用法。

RSA 加密算法的原理如下:

  1. 密钥生成:
    1.1 选择两个大素数 p 和 q,它们应该保密且相互独立。
    1.2 计算模数 N = p * q。
    1.3 计算欧拉函数 φ(N) = (p - 1) * (q - 1)。
    1.4 选择一个公钥加密指数 e,它应该满足 1 < e < φ(N) 且 e 与 φ(N) 互质。
    1.5 计算私钥解密指数 d,它是 e 模 φ(N) 的乘法逆元,即 (e * d) % φ(N) = 1。

  2. 加密:
    2.1 将明文消息转换为整数 M,确保 0 ≤ M < N。
    2.2 使用公钥 (e, N) 对消息进行加密,计算密文 C = M^e % N。

  3. 解密:
    3.1 使用私钥 (d, N) 对密文进行解密,计算明文消息 M = C^d % N。
    3.2 将得到的整数 M 转换回明文消息。

RSA 加密算法的用法如下:

  1. 加密通信:
    发送方:

    • 生成一对公钥 (e, N) 和私钥 (d, N)。
    • 将明文消息使用公钥进行加密,并发送给接收方。
      接收方:
    • 使用私钥进行解密,还原出明文消息。

    RSA 加密算法的安全性基于大数分解的困难性,即将 N 因数分解成 p 和 q 的乘积。由于大数分解对于大素数而言是计算上的困难问题,因此 RSA 加密算法在实践中被广泛使用。

  2. 数字签名:
    发送方:

    • 使用私钥对消息的哈希值进行加密,生成数字签名。
    • 将消息和数字签名一起发送给接收方。
      接收方:
    • 使用发送方的公钥对数字签名进行解密,获取消息的哈希值。
    • 自行计算接收到的消息的哈希值,并将两者进行比较,以验证数字签名的有效性。

    RSA 数字签名可用于验证消息的完整性和真实性,以及验证发送方的身份。

  3. 密钥交换:

    • 通过 RSA 加密算法,可以安全地交换密钥或密钥材料,以供后续对称加密算法使用。
    • 发送方使用接收方的公钥进行加密,并将加密后的密钥发送给接收方。
    • 接收方使用私钥进行解密,还原出原始密钥。

总结来说,RSA 加密算法通过公钥和私钥的配对,实现了加密和解密的功能。公钥用于加密和验证数字签名,私钥用于解密和生成数字签名。这种非对称加密算法在保护通信安全、数据完整性和身份验证等方面发挥着重要作用。

这里我们需要知道如何解出私匙.

可以使用python中的gmpy2库(不是自带的库)

import gmpy2
p=447685307 
q=2037 
e=17
phi_n = (p-1)*(q-1)
print("d:",gmpy2.invert(e,phi_n))
# d: 53616899001

同样可以下载工具RSA-Tool2

输入各项数据:

 

密码出来了.

第五题:

需要一个新的工具big integer calculate,因为我没找到工具,还可以用程序解决

按照这个的格式 m= c^d mod n

注意e给的值是16进制需要改为10进制

p=447685307 q=2037 e=17 c=704796792(e=11) 

import gmpy2
p = 447685307
q = 2037
e = 17
c = 704796792
n = p*q
phi_n = (p-1)*(q-1)
d = gmpy2.invert(e,phi_n)
print("m:",pow(c,d,n))

所以,答案 是输出的答案m: 904332399012

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值