1.变异凯撒
加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }
考点:凯撒加密变式
恺撒密码表是一种代换密码。通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
由于密文中有下划线和阿拉伯数字,所以推测应该不是用的字母表进行的替换加密,很有可能是用的ASCII码表。由题目可知其格式为flag{ }
,所以我们可以从flag
和afZ_
之间的对应关系找出规律
可以看出其偏移量是对每个字符:从第一个字符的偏移量为5,第二个字符的偏移量为6……第n个字符的偏移量为4+n。偏移量依次递增。 下面我们写脚本进行解密,
public class Q123 {
public static void main(String[] args) {
String ciphertext = "afZ_r9VYfScOeO_UL^RWUc";
char[] plaintext = new char[ciphertext.length()];
for(int i = 0; i < ciphertext.length(); i++){ //注意i是从0开始的,所以是5+i
plaintext[i] = (char)(((int)ciphertext.charAt(i) + 5 + i) % 128);
}
for (char i: plaintext) {
System.out.print(i);
}
}
}
得到flag{Caesar_variation}
2.RSA
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
dp+dq+p+q+c = m 已知dp dq泄露
使用脚本dp+dq+p+q+c = m
import gmpy2
I = gmpy2.invert(q,p)
mp = pow(c,dp,p)
mq = pow(c,dq,q) #求幂取模运算
m = (((mp-mq)*I)%p)*q+mq #求明文公式
print(hex(m)) #转为十六进制
3.还原大师
我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB???08???51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。 注意:得到的 flag 请包上 flag{} 提交
题目表示神秘字符串未知的问号部分为大写字母,我们可以将每一个位置替换成可能的字母(共262626种可能结果),计算MD5加密后的值,与题目所给的MD5比较。
import hashlib
s = "TASC?O3RJMV?WDJKX?ZM"
s_md5 = "E903???4DAB????08?????51?80??8A?"
for i in range(26):
# 替换第一个?
s1 = s.replace("?", chr(65 + i), 1)
for j in range(26):
# 替换第二个 ?
s2 = s1.replace("?", chr(65 + j), 1)
for k in range(26):
# 替换第三个 ?
s3 = s2.replace("?", chr(65 + k), 1)
# 将替换后的字符串进行MD5加密
c = hashlib.md5(s3.encode("utf-8")).hexdigest().upper()
if c.startswith(s_md5[0:4]):
print("flag{" + c + "}")
flag{E9032994DABAC08080091151380478A2}
在使用 hashlib 计算 md5 值时,需要将字符串先转换为字节类型,然后再计算其 md5 值。
hexdigest 函数是 hashlib 库中 md5 函数的一个方法,用于将 md5 函数计算出来的二进制数据转换为 16 进制字符串
4.篱笆墙的影子
查看题目
篱笆墙很明显联想到栅栏密码,用栅栏在线解密即可
5.capper
还能提示什么呢?公平的玩吧(密钥自己找) Dncnoqqfliqrpgeklwmppu
playfair也是一个加密方式,然后找了一个在线解密playfair在线解密
再把得到的
这个转换为小写即可提交。
6.异性相吸
查看题目
把这两个用010打开
运行得到0110011001101100011000010110011101111011011001010110000100110001011000100110001100110000001110010011100000111000001110010011100100110010001100100011011100110110011000100011011101100110001110010011010101100010001101010011010001100001001101110011010000110011001101010110010100111000001110010110010101111101
二转十六 十六转文
7.世上无难事
打开附件是一串字符
VIZZB IFIUOJBWO NVXAP OBC XZZ UKHVN IFIUOJBWO HB XVIXW XAW VXFI X QIXN VBD KQ IFIUOJBWO WBKAH NBWXO VBD XJBCN NKG QLKEIU DI XUI VIUI DKNV QNCWIANQ XN DXPIMKIZW VKHV QEVBBZ KA XUZKAHNBA FKUHKAKX XAW DI VXFI HBN QNCWIANQ NCAKAH KA MUBG XZZ XEUBQQ XGIUKEX MUBG PKAWIUHXUNIA NVUBCHV 12NV HUXWI XAW DI XUI SCQN QB HZXW NVXN XZZ EBCZW SBKA CQ NBWXO XAW DI DXAN NB NVXAP DXPIMKIZW MBU JIKAH QCEV XA BCNQNXAWKAH VBQN HKFI OBCUQIZFIQ X JKH UBCAW BM XLLZXCQI XAW NVI PIO KQ 640I11012805M211J0XJ24MM02X1IW09
单词错落有致,我们考虑简单替换
得到:THE KEY IS 640E11012805F211B0AB24FF02A1ED09,可知key为640E11012805F211B0AB24FF02A1ED09,又因为题目中提示为小写,转化大小写得到:640e11012805f211b0ab24ff02a1ed09
标签:加密,在线,flag,XAW,CTF,wp,字符串,md5,MD5 From: https://www.cnblogs.com/Consciosness/p/17413872.html