第一题:
我们可以看见一串代码 }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 选择两个大素数 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.1 将明文消息转换为整数 M,确保 0 ≤ M < N。
2.2 使用公钥 (e, N) 对消息进行加密,计算密文 C = M^e % N。 -
解密:
3.1 使用私钥 (d, N) 对密文进行解密,计算明文消息 M = C^d % N。
3.2 将得到的整数 M 转换回明文消息。
RSA 加密算法的用法如下:
-
加密通信:
发送方:- 生成一对公钥 (e, N) 和私钥 (d, N)。
- 将明文消息使用公钥进行加密,并发送给接收方。
接收方: - 使用私钥进行解密,还原出明文消息。
RSA 加密算法的安全性基于大数分解的困难性,即将 N 因数分解成 p 和 q 的乘积。由于大数分解对于大素数而言是计算上的困难问题,因此 RSA 加密算法在实践中被广泛使用。
-
数字签名:
发送方:- 使用私钥对消息的哈希值进行加密,生成数字签名。
- 将消息和数字签名一起发送给接收方。
接收方: - 使用发送方的公钥对数字签名进行解密,获取消息的哈希值。
- 自行计算接收到的消息的哈希值,并将两者进行比较,以验证数字签名的有效性。
RSA 数字签名可用于验证消息的完整性和真实性,以及验证发送方的身份。
-
密钥交换:
- 通过 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