你以为是md5吗解题

1.题目描述了md5这种提示,一般都是出题人的暗示,我就喜欢这么出题。

2.下载文件下来是一个txt文本文档,里面有串值看起来是md5,好了直接去在线解密了。
3.如果这么想就错了,仔细观察会发现md5是以0-9 a-f 组成十六进制数,里面出现了"i u o"很明显这肯定是出题人加的,去除掉再试试看。

4.果然是这样,出结果了还真的是666,那么flag就是这个了。
flag{666666666666}简单的RSA解题

了解RSA
RSA算法原理 :
RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
RSA算法的具体描述如下:
(1)任意选取两个不同的大素数p和q计算乘积 n = pq,n1 = (p-1)(q-1) ;
(2)任意选取一个大整数e,满足gcd(e,n1)=1,整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用);
(3)确定的解密钥d,满足(de) mod n1 = 1,即de = k(n1)+1,k >= 1 是一个任意的整数;所以,若知道e和n1,则很容易计算出d;
(4)公开整数n和e,秘密保存d ;
(5)将明文m(m<n是一个整数)加密成密文c,加密算法为:c = E(m)=m^e mod n;
(6)将密文c解密为明文m,解密算法为:m = D(c) = c^d mod n;
然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。
RSA解密算法思路 :
通过RSA算法原理的第三点可以看到,需要解密出 明文m,就要知道 密钥d,所以算法思路就围绕密钥d进行求解。
密钥d 通过 辗转相除法 (欧几里得算法,我后面才知道的......) 进行求解:
1、根据算法原理的第三点我们得知:(de) mod n1 = 1,即 de - k(n1) = 1;
2、知道 系数k 即可得到 密钥d,且 系数k 存在两种情况:
2.1 情况一:n1 != 1
2.1.1 先 n1 对 e 取模 后得到的值赋值给 n1
2.1.2 然后 e 对 赋值后的 n1 取模 得到的值赋值给 e
......
以此类推,最后得到 k = 1 时即可停止;
令 d = 1 代入倒数第二条式子,得到k的值代入倒数第三条式子,以此类推当代入至第一条式子时,得到的 d 即为 密钥d 的值;
2.2 情况二:n1 = 1
2.2.1 按照情况一的步骤,最后得到 n1 = 1 时即可停止;
根据情况一的步骤代入即可得到 密钥d 的值。
3、使用python内置函数 pow函数即可得到 明文m。
题目分析

1.题目给我们的是一个python的pyc文件,pyc是python编译出的二进制文件,很好转换成py源码的,想要解密就必须了解RSA加解密算法的原理。

2.用工具就可以还原出源代码,这里我用一个在线的网站进行转换。
解密网站:https://tool.lu/pyc/
from Crypto.Util.number import *
import gmpy2
import base64
p = int("0xED7FCFABD3C81C78E212323329DC1EE2BEB6945AB29AB51B9E3A2F9D8B0A22101E467",16) # 将16进制转换成10进制
q = int("0xAD85852F9964DA87880E48ADA5C4487480AA4023A4DE2C0321C170AD801C9",16)
e = 65537
n = p * q
c = int("0x75AB3202DE3E103B03C680F2BEBBD1EA689C8BF260963FE347B3533B99FB391F0A358FFAE5160D6DCB9FCD75CD3E46B2FE3CFFE9FA2E9508702FD6E4CE43486631",16)
phi = (p-1)*(q-1) #求φ(n),φ(n)=(p-1)(q-1)
d = gmpy2.invert(e,phi) #求e对于模n的逆元,即解密指数d
m = pow(c,d,n) #m=c^e mod n,m为10进制格式
flag = long_to_bytes(m) #m的字符串形式
print(base64.b64decode(flag)) #上面得到的flag是base64编码,进行一次base64解码即可
# 输出结果:flag{IlikeCTFbutCTFdon'tlikeme}3.根据RSA解密算法公式,解出flag。

flag{IlikeCTFbutCTFdon'tlikeme}简单的密码解题

1.题目意思是简单的密码,感觉不会太难,试着把题目下载看下。

2.打开后二进制?一开始我想的是二进制转换成字符串,尝试失败了后来观察了下,会不会通过二进制的0和1给我们返回给一种状态呢,真的是没想到题目里的0代表 . 而 1 代表 - 这就是摩斯密码的规则。

3.拿到在线网站解码下,果然是这样的 摩斯密码是以大写显示,我们要转换成小写,%u7b代表字符 " { " , %u7d代表的是 " } " 那么flag就是这个了。

4.可以对照下这个摩斯密码表。
Bina = "0010 0100 01 110 1111011 11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 001101 00 10 1 0 010 0 000 1 01111 10 11110 101011 1111101"
strbox = ""
for i in Bina:
if i == "0":
strbox += "."
if i == "1":
strbox += "-"
if i == " ":
strbox += " "
dic = {
".-": "A", "-...": "B", "-.-.":"C","-..":"D",
".":"E","..-.":"F","--.":"G","....":"H",
"..":"I",".---":"J","-.-":"K",".-..":"L",
"--":"M","-.":"N","---":"O",".--.":"P",
"--.-":"Q",".-.":"R","...":"S","-":"T","----.":"9",
"..-":"U","...-":"V",".--":"W","-..-":"X",
"..--.-":"_",".----":"1", "-.--":"Y","--..":"Z",
"----.--":"{","-----.-":"}","-.-.--":"!","-----":"0"
}
for i in strbox.split():
print(dic[i].lower(), end="")
flag{m0rse_code_1s_interest1n9!}来自宇宙的信号解题

1."标准银河字母(Standard Galactic Alphabet)"出自游戏《指挥官基恩》系列。

2.一开始还真不知道是什么,百度过后才发现还有这种的,学习了这是标准银河字母,按照这张表输入对应的字母,就是正确的flag了。
flag{nopqrst}参考文章
https://blog.csdn.net/weixin_43211186/article/details/125180939
聪明的小羊解题
题目类型:Crypto
描述: 一只小羊翻过了2个栅栏 fa{fe13f590lg6d46d0d0}
1.题目描述看似给我们提供了flag但经过了加密,他给我们提示了关键信息小羊 栅栏 翻过2个,一开始我还不清楚是个什么加密。

2.顺着关键字百度,找到了个栅栏密码,还有这种加密长知识赶紧学习了。

3.找到个栅栏密码解密工具,设置翻过2组解密见flag。
评论 (0)